bq2415x_charger: Add support for offline and 100mA mode v52
authorPali Rohár <pali.rohar@gmail.com>
Thu, 14 Feb 2013 16:34:58 +0000 (17:34 +0100)
committerPali Rohár <pali.rohar@gmail.com>
Thu, 14 Feb 2013 16:34:58 +0000 (17:34 +0100)
kernel-power-2.6.28/debian/changelog
kernel-power-2.6.28/debian/patches/bq2415x_charger.patch
kernel-power-2.6.28/debian/patches/bq2415x_rx51.patch

index 0d4f6d0..12e397e 100644 (file)
@@ -14,8 +14,9 @@ kernel-power (1:2.6.28-10power52) fremantle; urgency=low
   * Optify bootimg package
   * Enable vlan (8021q) module
   * Fix reporting temperature in rx51_battery driver (driver should export temperature in 1/10 °C)
+  * Add support for offline mode in bq2415x_charger driver
 
- -- Pali Rohár <pali.rohar@gmail.com>  Fri, 18 Jan 2013 17:31:40 +0100
+ -- Pali Rohár <pali.rohar@gmail.com>  Thu, 14 Feb 2013 17:34:58 +0100
 
 kernel-power (1:2.6.28-10power51r1) fremantle; urgency=low
 
index 41d807e..5fd90ed 100644 (file)
@@ -1,6 +1,6 @@
 --- /dev/null
 +++ kernel-power/drivers/power/bq2415x_charger.c
-@@ -0,0 +1,1644 @@
+@@ -0,0 +1,1655 @@
 +/*
 +    bq2415x_charger.c - bq2415x charger driver
 +    Copyright (C) 2011-2012  Pali Rohár <pali.rohar@gmail.com>
 +      int charger = 0;
 +      int boost = 0;
 +
-+      if (mode == BQ2415X_MODE_HOST_CHARGER ||
-+              mode == BQ2415X_MODE_DEDICATED_CHARGER)
-+                      charger = 1;
-+
 +      if (mode == BQ2415X_MODE_BOOST)
 +              boost = 1;
++      else if (mode != BQ2415X_MODE_OFF)
++              charger = 1;
 +
 +      if (!charger)
 +              ret = bq2415x_exec_command(bq, BQ2415X_CHARGER_DISABLE);
 +              return ret;
 +
 +      switch (mode) {
++      case BQ2415X_MODE_OFF:
++              dev_dbg(bq->dev, "changing mode to: Offline\n");
++              ret = bq2415x_set_current_limit(bq, 100);
++              break;
 +      case BQ2415X_MODE_NONE:
 +              dev_dbg(bq->dev, "changing mode to: N/A\n");
 +              ret = bq2415x_set_current_limit(bq, 100);
 +      dev_err(bq->dev, "%s\n", msg);
 +      if (bq->automode > 0)
 +              bq->automode = 0;
-+      bq2415x_set_mode(bq, BQ2415X_MODE_NONE);
++      bq2415x_set_mode(bq, BQ2415X_MODE_OFF);
 +      bq2415x_set_autotimer(bq, 0);
 +}
 +
 +                      return -ENOSYS;
 +              bq->automode = 1;
 +              mode = bq->reported_mode;
++      } else if (strncmp(buf, "off", 3) == 0) {
++              if (bq->automode > 0)
++                      bq->automode = 0;
++              mode = BQ2415X_MODE_OFF;
 +      } else if (strncmp(buf, "none", 4) == 0) {
 +              if (bq->automode > 0)
 +                      bq->automode = 0;
 +              ret += sprintf(buf+ret, "auto (");
 +
 +      switch (bq->mode) {
++      case BQ2415X_MODE_OFF:
++              ret += sprintf(buf+ret, "off");
++              break;
 +      case BQ2415X_MODE_NONE:
 +              ret += sprintf(buf+ret, "none");
 +              break;
 +              return -EINVAL;
 +
 +      switch (bq->reported_mode) {
++      case BQ2415X_MODE_OFF:
++              return sprintf(buf, "off\n");
 +      case BQ2415X_MODE_NONE:
 +              return sprintf(buf, "none\n");
 +      case BQ2415X_MODE_HOST_CHARGER:
 +      bq->dev = &client->dev;
 +      bq->chip = id->driver_data;
 +      bq->name = name;
-+      bq->mode = BQ2415X_MODE_NONE;
-+      bq->reported_mode = BQ2415X_MODE_NONE;
++      bq->mode = BQ2415X_MODE_OFF;
++      bq->reported_mode = BQ2415X_MODE_OFF;
 +      bq->autotimer = 0;
 +      bq->automode = 0;
 +
 +MODULE_LICENSE("GPL");
 --- /dev/null
 +++ kernel-power/include/linux/power/bq2415x_charger.h
-@@ -0,0 +1,90 @@
+@@ -0,0 +1,91 @@
 +/*
 +    bq2415x_charger.h - bq2415x charger driver
 +    Copyright (C) 2011-2012  Pali Rohár <pali.rohar@gmail.com>
 +
 +/* Supported modes with maximal current limit */
 +enum bq2415x_mode {
-+      BQ2415X_MODE_NONE,              /* unknown or no charger (100mA) */
++      BQ2415X_MODE_OFF,               /* offline mode (charger disabled) */
++      BQ2415X_MODE_NONE,              /* unknown charger (100mA) */
 +      BQ2415X_MODE_HOST_CHARGER,      /* usb host/hub charger (500mA) */
 +      BQ2415X_MODE_DEDICATED_CHARGER, /* dedicated charger (unlimited) */
 +      BQ2415X_MODE_BOOST,             /* boost mode (charging disabled) */
index 5dfeda6..47c62fa 100644 (file)
 +      else if (rx51_charger_connected)
 +              mode = BQ2415X_MODE_HOST_CHARGER; /* usb charger */
 +      else
-+              mode = BQ2415X_MODE_NONE; /* no charger */
++              mode = BQ2415X_MODE_OFF; /* no charger */
 +
 +      if (rx51_charger_mode == mode)
 +              return;