Re: [PATCH] mfd: DA9030 USB charge pump mode selection support

From: Jonathan Cameron
Date: Mon Dec 15 2008 - 07:52:56 EST



From: Jonathan Cameron <jic23@xxxxxxxxx>

Add support for changing the mode of the da9030 usb charge pump

Signed-off-by: Jonathan Cameron <jic23@xxxxxxxxx>

--

This version simply adds the functionality to the da903x mfd driver
core. If anyone can suggest a way round simply maintaining a
global pointer to the device it would be good.

To be able to call this from a board config file the driver must be
built in rather than a module but enforcing that is down to the
board Kconfig entry.

diff --git a/drivers/mfd/da903x.c b/drivers/mfd/da903x.c
index 0b5bd85..600e884 100644
--- a/drivers/mfd/da903x.c
+++ b/drivers/mfd/da903x.c
@@ -472,6 +472,32 @@ failed:
return ret;
}

+/* Single device assumption */
+struct device *da9030_mfd_dev;
+
+int da9030_set_usb_charge_pump_mode(int mode)
+{
+ uint8_t val = 0;
+
+ if (da9030_mfd_dev == NULL)
+ return -EINVAL;
+
+ switch (mode) {
+ case DA9030_USBPUMP_AUTO:
+ val = 0;
+ break;
+ case DA9030_USBPUMP_CHARGE_PUMP:
+ val = 0x40;
+ break;
+ case DA9030_USBPUMP_CURRENT_SOURCE:
+ val = 0x80;
+ break;
+ }
+
+ return da903x_write(da9030_mfd_dev, DA9030_USBPUMP_REG, val);
+}
+EXPORT_SYMBOL_GPL(da9030_set_usb_charge_pump_mode);
+
static int __devinit da903x_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
@@ -487,6 +513,7 @@ static int __devinit da903x_probe(struct i2c_client *client,
chip->client = client;
chip->dev = &client->dev;
chip->ops = &da903x_ops[id->driver_data];
+ da9030_mfd_dev = &client->dev;

mutex_init(&chip->lock);
INIT_WORK(&chip->irq_work, da903x_irq_work);
@@ -547,6 +574,7 @@ static struct i2c_driver da903x_driver = {

static int __init da903x_init(void)
{
+ da9030_mfd_dev = NULL;
return i2c_add_driver(&da903x_driver);
}
module_init(da903x_init);
diff --git a/include/linux/mfd/da903x.h b/include/linux/mfd/da903x.h
index cad314c..0f12331 100644
--- a/include/linux/mfd/da903x.h
+++ b/include/linux/mfd/da903x.h
@@ -189,6 +190,13 @@ extern int da903x_unregister_notifier(struct device *dev,

extern int da903x_query_status(struct device *dev, unsigned int status);

+#define DA9030_USBPUMP_AUTO 1
+#define DA9030_USBPUMP_CHARGE_PUMP 2
+#define DA9030_USBPUMP_CURRENT_SOURCE 3
+
+#define DA9030_USBPUMP_REG 0x19
+
+int da9030_set_usb_charge_pump_mode(int mode);

/* NOTE: the two functions below are not intended for use outside
* of the DA9034 sub-device drivers
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/