Comment 1 by Marek Belisko, Sep 18, 2014
Issue was introduced by: 8c52a7cf8e066d7ce202e38863c225a7d4d0bfeb Maybe we can ask Andreas to clean it up or just drop it?
Comment 2 by Nikolaus Schaller, Aug 20, 2015
has been guarded by #ifndef MODULE so that we can compile with omap2plus_defconfig
Labels:
Priority:Medium
Priority:Critical
Comment 3 by Nikolaus Schaller, Aug 20, 2015
Summary:
twl4030 strange dependency between drivers/phy/phy-twl4030-usb and drivers/power/twl4030_charger.c
Comment 4 by Nikolaus Schaller, Feb 13, 2016
The dependency has completely disappeared in 4.5.
Status:
Fixed
Sign in to reply to this comment.
Reported by Nikolaus Schaller, Sep 9, 2014
currently, both drivers are coupled by a private function call which makes it impossible to link if they are configured as modules. This is not mainline code but introduced by our GTA04 stuff. The code is also marked as "hack": static ssize_t twl4030_usb_vbus_out_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t n) { struct twl4030_usb *twl = dev_get_drvdata(dev); /* hack, should probably not be called directly this way */ extern void twl4030_charger_enable_usb_ext(bool); if (sysfs_streq(buf, "on")) { twl4030_charger_enable_usb_ext(0); twl4030_i2c_access(twl, 1); twl4030_usb_set_bits(twl, ULPI_OTG_CTRL, ULPI_OTG_CTRL_DRVVBUS); twl4030_i2c_access(twl, 0); } else if (sysfs_streq(buf, "off")) { twl4030_i2c_access(twl, 1); twl4030_usb_clear_bits(twl, ULPI_OTG_CTRL, ULPI_OTG_CTRL_DRVVBUS); twl4030_i2c_access(twl, 0); twl4030_charger_enable_usb_ext(1); } else return -EINVAL; return n; } As far as I understand this code it disables charging if the OTG VBUS driver is turned on. But it also appears that twl4030_usb_vbus_out_store() is only called if someone writes "on" or "off" to /sys/.../vbus_out So we can simply ask the user space that writes "on" to disable the charger... On the other hand the twl4030_charger listens to some usb_notifier_block and passes an event to its work procedure in twl4030_bci_usb_ncb(). So there is some communication path between the usb (phy) and the charger. We just need to create and send the correct notification_block in drivers/phy/phy-twl4030-usb. The events we should send are: USB_EVENT_VBUS / USB_EVENT_CHARGER or USB_EVENT_NONE. They are usually sent by: --- hm good question. I did not find any code that sends something using the USB_EVENT_CHARGER constant?!?