All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] drivers: power: twl4030_charger: fix link problems when building as module
@ 2015-09-25 20:20 ` Marek Belisko
  0 siblings, 0 replies; 25+ messages in thread
From: Marek Belisko @ 2015-09-25 20:20 UTC (permalink / raw)
  To: sre, dbaryshkov, dwmw2
  Cc: neilb, devicetree, linux-kernel, linux-arm-kernel, linux-pm, hns,
	Marek Belisko

If either twl4030_charger or twl4030_madc is configured as MODULE,
we get build (link) errors.

To solve, the direct call of twl4030_get_madc_conversion() is replaced
by a call to iio_read_channel_processed().

Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
Signed-off-by: Marek Belisko <marek@goldelico.com>
---
changes from v2: make iio propries optional to keep functionality for old DT also
changes from V1: added missing iio_channel_release + document and add new DT bindings
 drivers/power/twl4030_charger.c | 45 ++++++++++++++++++++++++++++-------------
 1 file changed, 31 insertions(+), 14 deletions(-)

diff --git a/drivers/power/twl4030_charger.c b/drivers/power/twl4030_charger.c
index f4f2c1f..82e2a05 100644
--- a/drivers/power/twl4030_charger.c
+++ b/drivers/power/twl4030_charger.c
@@ -22,7 +22,7 @@
 #include <linux/power_supply.h>
 #include <linux/notifier.h>
 #include <linux/usb/otg.h>
-#include <linux/i2c/twl4030-madc.h>
+#include <linux/iio/consumer.h>
 
 #define TWL4030_BCIMDEN		0x00
 #define TWL4030_BCIMDKEY	0x01
@@ -91,21 +91,23 @@
 #define TWL4030_MSTATEC_COMPLETE1	0x0b
 #define TWL4030_MSTATEC_COMPLETE4	0x0e
 
-#if IS_ENABLED(CONFIG_TWL4030_MADC)
 /*
  * If AC (Accessory Charger) voltage exceeds 4.5V (MADC 11)
  * then AC is available.
  */
-static inline int ac_available(void)
+static inline int ac_available(struct iio_channel *channel_vac)
 {
-	return twl4030_get_madc_conversion(11) > 4500;
-}
-#else
-static inline int ac_available(void)
-{
-	return 0;
+	int val, err;
+
+	if (!channel_vac)
+		return 0;
+
+	err = iio_read_channel_processed(channel_vac, &val);
+	if (err < 0)
+		return 0;
+	return val > 4500;
 }
-#endif
+
 static bool allow_usb;
 module_param(allow_usb, bool, 0644);
 MODULE_PARM_DESC(allow_usb, "Allow USB charge drawing default current");
@@ -128,6 +130,7 @@ struct twl4030_bci {
 	 */
 	unsigned int		ichg_eoc, ichg_lo, ichg_hi;
 	unsigned int		usb_cur, ac_cur;
+	struct iio_channel	*channel_vac;
 	bool			ac_is_active;
 	int			usb_mode, ac_mode; /* charging mode requested */
 #define	CHARGE_OFF	0
@@ -278,7 +281,7 @@ static int twl4030_charger_update_current(struct twl4030_bci *bci)
 	 * If AC (Accessory Charger) voltage exceeds 4.5V (MADC 11)
 	 * and AC is enabled, set current for 'ac'
 	 */
-	if (ac_available()) {
+	if (ac_available(bci->channel_vac)) {
 		cur = bci->ac_cur;
 		bci->ac_is_active = true;
 	} else {
@@ -1048,6 +1051,12 @@ static int twl4030_bci_probe(struct platform_device *pdev)
 		return ret;
 	}
 
+	bci->channel_vac = iio_channel_get(&pdev->dev, "vac");
+	if (IS_ERR(bci->channel_vac)) {
+		bci->channel_vac = NULL;
+		dev_warn(&pdev->dev, "could not request vac iio channel");
+	}
+
 	INIT_WORK(&bci->work, twl4030_bci_usb_work);
 	INIT_DELAYED_WORK(&bci->current_worker, twl4030_current_worker);
 
@@ -1061,8 +1070,10 @@ static int twl4030_bci_probe(struct platform_device *pdev)
 			bci->transceiver = devm_usb_get_phy_by_node(
 				bci->dev, phynode, &bci->usb_nb);
 			if (IS_ERR(bci->transceiver) &&
-			    PTR_ERR(bci->transceiver) == -EPROBE_DEFER)
-				return -EPROBE_DEFER;
+			    PTR_ERR(bci->transceiver) == -EPROBE_DEFER) {
+				ret = -EPROBE_DEFER;
+				goto fail;
+			}
 		}
 	}
 
@@ -1073,7 +1084,7 @@ static int twl4030_bci_probe(struct platform_device *pdev)
 			       TWL4030_INTERRUPTS_BCIIMR1A);
 	if (ret < 0) {
 		dev_err(&pdev->dev, "failed to unmask interrupts: %d\n", ret);
-		return ret;
+		goto fail;
 	}
 
 	reg = ~(u32)(TWL4030_VBATOV | TWL4030_VBUSOV | TWL4030_ACCHGOV);
@@ -1106,6 +1117,10 @@ static int twl4030_bci_probe(struct platform_device *pdev)
 		twl4030_charger_enable_backup(0, 0);
 
 	return 0;
+fail:
+	iio_channel_release(bci->channel_vac);
+
+	return ret;
 }
 
 static int __exit twl4030_bci_remove(struct platform_device *pdev)
@@ -1116,6 +1131,8 @@ static int __exit twl4030_bci_remove(struct platform_device *pdev)
 	twl4030_charger_enable_usb(bci, false);
 	twl4030_charger_enable_backup(0, 0);
 
+	iio_channel_release(bci->channel_vac);
+
 	device_remove_file(&bci->usb->dev, &dev_attr_max_current);
 	device_remove_file(&bci->usb->dev, &dev_attr_mode);
 	device_remove_file(&bci->ac->dev, &dev_attr_max_current);
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2015-10-13 20:08 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-25 20:20 [PATCH v3] drivers: power: twl4030_charger: fix link problems when building as module Marek Belisko
2015-09-25 20:20 ` Marek Belisko
2015-09-25 20:20 ` [PATCH v3] Documentation: DT: twl-charger: document new iio properties Marek Belisko
2015-09-25 20:20   ` Marek Belisko
2015-09-25 20:20 ` [PATCH v3] ARM: dts: twl4030: Add iio properties for bci subnode Marek Belisko
2015-09-25 20:20   ` Marek Belisko
     [not found]   ` <1443212447-5841-3-git-send-email-marek-xXXSsgcRVICgSpxsJD1C4w@public.gmane.org>
2015-09-26 17:29     ` Sebastian Reichel
2015-09-26 17:29       ` Sebastian Reichel
2015-09-26 17:29       ` Sebastian Reichel
2015-09-26 19:58       ` Belisko Marek
2015-09-26 19:58         ` Belisko Marek
2015-09-26 19:58         ` Belisko Marek
     [not found]         ` <CAAfyv36nZ3c-yw7QQHwBWk3GwY31rV3Uq2n0dz5hppn5JFhEcA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-10-12 21:38           ` Tony Lindgren
2015-10-12 21:38             ` Tony Lindgren
2015-10-12 21:38             ` Tony Lindgren
     [not found]             ` <20151012213827.GC23801-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2015-10-12 22:20               ` Tony Lindgren
2015-10-12 22:20                 ` Tony Lindgren
2015-10-12 22:20                 ` Tony Lindgren
2015-10-12 23:53                 ` Sebastian Reichel
2015-10-12 23:53                   ` Sebastian Reichel
2015-10-13  6:43                   ` Belisko Marek
2015-10-13  6:43                     ` Belisko Marek
2015-09-26 17:23 ` [PATCH v3] drivers: power: twl4030_charger: fix link problems when building as module Sebastian Reichel
2015-09-26 17:23   ` Sebastian Reichel
2015-10-13 20:08 ` [PATCH] ARM: dts: twl4030: Add iio properties for bci subnode Marek Belisko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.