aboutsummaryrefslogtreecommitdiff
path: root/drivers/i2c
diff options
context:
space:
mode:
authorAndy Green <andy@openmoko.com>2008-11-19 17:09:56 +0000
committerAndy Green <agreen@pads.home.warmcat.com>2008-11-19 17:09:56 +0000
commit5ae81eed14630f05a6793214690f56da94a4e874 (patch)
tree4b5986d216c88bd9e205b1afddc6917c6c4fa74b /drivers/i2c
parent66c698f261b49b56a9f47a3347e9496346fd64ff (diff)
add-pcf50633-allow-force-charger-type.patch
This patch adds a sysfs node: /sys/class/i2c-adapter/i2c-0/0-0073/force_usb_limit_dangerous it allows to force the charging limit regardless of the one chosen by pcf50633 kernel driver. As such, if you write a charging limit here that is not suitable for the power source, and the power source is not current limited on its side, it could draw more current than your power source can handle, burn down you house, etc. If you're certain that your power supply can handle it, you can use this on your own responsibility to make the amount drawn by the PMU match what you believed your power supply could handle. Example usage, in case where you have a dumb 500mA USB charger that does not have the ID resistor: # cat /sys/class/i2c-adapter/i2c-0/0-0073/charger_type host/500mA usb mode 100mA <=== dumb charger does not ennumerate us # echo 500 > /sys/class/i2c-adapter/i2c-0/0-0073/force_usb_limit_dangerous # cat /sys/class/i2c-adapter/i2c-0/0-0073/charger_type host/500mA usb mode 500mA Signed-off-by: Andy Green <andy@openmoko.com>
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/chips/pcf50633.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c
index 352b54a7e4c..1074b946d64 100644
--- a/drivers/i2c/chips/pcf50633.c
+++ b/drivers/i2c/chips/pcf50633.c
@@ -1946,6 +1946,20 @@ static ssize_t show_charger_type(struct device *dev,
static DEVICE_ATTR(charger_type, 0444, show_charger_type, NULL);
+static ssize_t force_usb_limit_dangerous(struct device *dev,
+ struct device_attribute *attr, const char *buf, size_t count)
+{
+ struct i2c_client *client = to_i2c_client(dev);
+ struct pcf50633_data *pcf = i2c_get_clientdata(client);
+ int ma = simple_strtoul(buf, NULL, 10);
+
+ pcf50633_usb_curlim_set(pcf, ma);
+ return count;
+}
+
+static DEVICE_ATTR(force_usb_limit_dangerous, 0600,
+ NULL, force_usb_limit_dangerous);
+
/*
* Charger adc
*/
@@ -2023,6 +2037,7 @@ static struct attribute *pcf_sysfs_entries[] = {
&dev_attr_voltage_ldo6.attr,
&dev_attr_voltage_hcldo.attr,
&dev_attr_charger_type.attr,
+ &dev_attr_force_usb_limit_dangerous.attr,
&dev_attr_charger_adc.attr,
&dev_attr_dump_regs.attr,
NULL, /* going to add things at this point! */