summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Krummenacher <max.krummenacher@toradex.com>2015-12-27 13:53:50 +0100
committerStefan Agner <stefan.agner@toradex.com>2016-03-08 10:23:00 -0800
commit9b680321787c09c00e13d6a3a9edeb16e6f27041 (patch)
treeec001a440d2e4267fdd0b56fb1576e13ed49d92d
parent0824a2b7aa7e1f7ea6accad280b6e4d8f1b9a3c9 (diff)
chipidea: make usb charger optional
The USB charger functionality depends on functions provided by CONFIG_POWER_SUPPLY but this dependency is not forced through Kconfig. Don't compile the functionality in when CONFIG_POWER_SUPPLY is not set. This fixes linker errors of not found symbols. power_supply_changed power_supply_register power_supply_unregister Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com> Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
-rw-r--r--drivers/usb/chipidea/ci_hdrc_imx.c13
-rw-r--r--drivers/usb/chipidea/usbmisc_imx.c12
2 files changed, 25 insertions, 0 deletions
diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c b/drivers/usb/chipidea/ci_hdrc_imx.c
index dc7c9f14d364..ea8e2673879b 100644
--- a/drivers/usb/chipidea/ci_hdrc_imx.c
+++ b/drivers/usb/chipidea/ci_hdrc_imx.c
@@ -123,6 +123,7 @@ struct ci_hdrc_imx_data {
const struct ci_hdrc_imx_platform_flag *data;
};
+#ifdef CONFIG_POWER_SUPPLY
static char *imx_usb_charger_supplied_to[] = {
"imx_usb_charger",
};
@@ -132,6 +133,7 @@ static enum power_supply_property imx_usb_charger_power_props[] = {
POWER_SUPPLY_PROP_ONLINE, /* VBUS online */
POWER_SUPPLY_PROP_CURRENT_MAX, /* Maximum current in mA */
};
+#endif
static inline bool is_imx6q_con(struct ci_hdrc_imx_data *imx_data)
{
@@ -318,6 +320,7 @@ static int ci_hdrc_imx_notify_event(struct ci_hdrc *ci, unsigned event)
return ret;
}
+#ifdef CONFIG_POWER_SUPPLY
static int imx_usb_charger_get_property(struct power_supply *psy,
enum power_supply_property psp,
union power_supply_propval *val)
@@ -374,6 +377,7 @@ static int imx_usb_register_charger(struct usb_charger *charger,
return power_supply_register(charger->dev, psy);
}
+#endif
static int ci_hdrc_imx_probe(struct platform_device *pdev)
{
@@ -506,6 +510,7 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
}
if (of_find_property(np, "imx-usb-charger-detection", NULL)) {
+#ifdef CONFIG_POWER_SUPPLY
data->imx_usb_charger_detection = true;
data->charger.dev = &pdev->dev;
data->usbmisc_data->charger = &data->charger;
@@ -516,6 +521,10 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
if (!ret)
dev_dbg(&pdev->dev,
"USB Charger is created\n");
+#else
+ dev_err(&pdev->dev,
+ "USB Charger requires CONFIG_POWER_SUPPLY\n");
+#endif
}
ret = imx_usbmisc_init(data->usbmisc_data);
@@ -569,8 +578,10 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
disable_device:
ci_hdrc_remove_device(data->ci_pdev);
remove_charger:
+#ifdef CONFIG_POWER_SUPPLY
if (data->imx_usb_charger_detection)
power_supply_unregister(&data->charger.psy);
+#endif
disable_hsic_regulator:
if (data->hsic_pad_regulator)
ret = regulator_disable(data->hsic_pad_regulator);
@@ -592,8 +603,10 @@ static int ci_hdrc_imx_remove(struct platform_device *pdev)
ci_hdrc_remove_device(data->ci_pdev);
clk_disable_unprepare(data->clk);
release_bus_freq(BUS_FREQ_HIGH);
+#ifdef CONFIG_POWER_SUPPLY
if (data->imx_usb_charger_detection)
power_supply_unregister(&data->charger.psy);
+#endif
if (data->hsic_pad_regulator)
regulator_disable(data->hsic_pad_regulator);
diff --git a/drivers/usb/chipidea/usbmisc_imx.c b/drivers/usb/chipidea/usbmisc_imx.c
index e768eb7b03fa..bd4117d2f4e7 100644
--- a/drivers/usb/chipidea/usbmisc_imx.c
+++ b/drivers/usb/chipidea/usbmisc_imx.c
@@ -805,6 +805,7 @@ static int usbmisc_term_select_override(struct imx_usbmisc_data *data,
return 0;
}
+#ifdef CONFIG_POWER_SUPPLY
/***************************************************************************/
/* imx usb charger detecton */
/***************************************************************************/
@@ -1099,6 +1100,7 @@ int imx7d_charger_secondary_detection(struct imx_usbmisc_data *data)
return 0;
}
+#endif
static const struct usbmisc_ops imx25_usbmisc_ops = {
.init = usbmisc_imx25_init,
@@ -1118,8 +1120,10 @@ static const struct usbmisc_ops imx6q_usbmisc_ops = {
.init = usbmisc_imx6q_init,
.hsic_set_connect = usbmisc_imx6_hsic_set_connect,
.hsic_set_clk = usbmisc_imx6_hsic_set_clk,
+#ifdef CONFIG_POWER_SUPPLY
.charger_primary_detection = imx6_charger_primary_detection,
.charger_secondary_detection = imx6_charger_secondary_detection,
+#endif
};
static const struct usbmisc_ops vf610_usbmisc_ops = {
@@ -1132,8 +1136,10 @@ static const struct usbmisc_ops imx6sx_usbmisc_ops = {
.power_lost_check = usbmisc_imx6sx_power_lost_check,
.hsic_set_connect = usbmisc_imx6_hsic_set_connect,
.hsic_set_clk = usbmisc_imx6_hsic_set_clk,
+#ifdef CONFIG_POWER_SUPPLY
.charger_primary_detection = imx6_charger_primary_detection,
.charger_secondary_detection = imx6_charger_secondary_detection,
+#endif
};
static const struct usbmisc_ops imx7d_usbmisc_ops = {
@@ -1148,8 +1154,10 @@ static const struct usbmisc_ops imx7d_usbmisc_ops = {
.adp_sense_connection = usbmisc_otg_adp_sense_connection,
.adp_attach_event = usbmisc_otg_adp_is_attach_event,
.term_select_override = usbmisc_term_select_override,
+#ifdef CONFIG_POWER_SUPPLY
.charger_primary_detection = imx7d_charger_primary_detection,
.charger_secondary_detection = imx7d_charger_secondary_detection,
+#endif
};
int imx_usbmisc_init(struct imx_usbmisc_data *data)
@@ -1351,6 +1359,7 @@ EXPORT_SYMBOL_GPL(imx_usbmisc_term_select_override);
int imx_usbmisc_charger_detection(struct imx_usbmisc_data *data, bool connect)
{
+#ifdef CONFIG_POWER_SUPPLY
struct imx_usbmisc *usbmisc;
struct usb_charger *charger = data->charger;
int ret = 0;
@@ -1383,6 +1392,9 @@ int imx_usbmisc_charger_detection(struct imx_usbmisc_data *data, bool connect)
}
mutex_unlock(&charger->lock);
return ret;
+#else
+ return -ENOTSUPP;
+#endif
}
EXPORT_SYMBOL_GPL(imx_usbmisc_charger_detection);