summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/boot/dts/omap3-minnow-p0.dts8
-rw-r--r--arch/arm/boot/dts/omap3-minnow.dtsi23
-rw-r--r--arch/arm/configs/eng_minnow_defconfig1
-rw-r--r--drivers/misc/c55_ctrl.c16
-rw-r--r--drivers/regulator/tps65912-regulator.c17
-rw-r--r--include/linux/mfd/tps65912.h5
6 files changed, 53 insertions, 17 deletions
diff --git a/arch/arm/boot/dts/omap3-minnow-p0.dts b/arch/arm/boot/dts/omap3-minnow-p0.dts
index c7ae081e8e7..59bcdb03346 100644
--- a/arch/arm/boot/dts/omap3-minnow-p0.dts
+++ b/arch/arm/boot/dts/omap3-minnow-p0.dts
@@ -16,6 +16,14 @@
0x01 /* Minnow P0 portable */
>;
+ c55-ctrl@0 {
+ compatible = "ti,c55-ctrl";
+ reg = <0 0>;
+ gpios = <&gpio3 12 1>, /* IRQ gpio_ap_int gpio-076 */
+ <&gpio3 16 0>, /* gpio_reset gpio-80*/
+ <&gpio3 17 2>; /* gpio_c55_int gpio-81*/
+ c55-ctrl-supply = <&ldo9_reg>;
+ };
vib-gpio {
compatible = "mot,vib-gpio";
diff --git a/arch/arm/boot/dts/omap3-minnow.dtsi b/arch/arm/boot/dts/omap3-minnow.dtsi
index 569ceaf0da6..6256a5642a4 100644
--- a/arch/arm/boot/dts/omap3-minnow.dtsi
+++ b/arch/arm/boot/dts/omap3-minnow.dtsi
@@ -11,13 +11,6 @@
model = "Motorola OMAP3 Platform";
compatible = "mot,omap3-minnow", "ti,omap3";
- c55-ctrl@0 {
- compatible = "ti,c55-ctrl";
- reg = <0 0>;
- gpios = <&gpio3 12 1>, /* IRQ gpio_ap_int gpio-076 */
- <&gpio3 16 0>, /* gpio_reset gpio-80*/
- <&gpio3 17 2>; /* gpio_c55_int gpio-81*/
- };
Display@0 {
compatible = "mot,minnow-panel-dsi-cm";
/* 0: MINNOW_PANEL_CM_220X176
@@ -170,9 +163,9 @@
0x0e6 0x11c /* CAM_D0, MODE4 | INPUT_PULLUP */
0x122 0x004 /* SIM_CLK, MODE4 | OUTPUT */
0x124 0x104 /* SIM_PWRCTRL, MODE4 | INPUT */
- 0x144 0x000 /* UART2_TX, MODE0 | OUTPUT */
+ 0x144 0x100 /* UART2_CTS, MODE0 | OUTPUT */
0x146 0x000 /* UART2_RTS, MODE0 | OUTPUT */
- 0x148 0x100 /* UART2_CTS, MODE0 | INPUT */
+ 0x148 0x000 /* UART2_TX, MODE0 | INPUT */
0x14a 0x100 /* UART2_RX, MODE0 | INPUT */
0x14c 0x000 /* UART1_TX, MODE0 | OUTPUT */
0x14e 0x000 /* UART1_RTS, MODE0 | OUTPUT */
@@ -180,7 +173,7 @@
0x152 0x100 /* UART1_RX, MODE0 | INPUT */
0x154 0x100 /* MCBSP4_CLKX, MODE0| INPUT*/
0x156 0x100 /* MCBSP4_DR, MODE0 | INPUT */
- 0x158 0x000 /* MCBSP4_DX, MODE0 | OUTPUT */
+ 0x158 0x000 /* MCBSP4_DX, MODE0 | OUTPUT */
0x15a 0x118 /* MCBSP4_FSX,MODE0 | INPUT_PULLUP*/
0x168 0x104 /* MCBSP1_CLKX, MODE4 | INPUT */
0x16c 0x004 /* UART3_RTS_SD, MODE4 | OUTPUT */
@@ -188,11 +181,11 @@
0x190 0x118 /* I2C2_SDA, MODE0 | INPUT_PULLUP */
0x192 0x118 /* I2C3_SCL, MODE0 | INPUT_PULLUP */
0x194 0x118 /* I2C3_SDA, MODE0 | INPUT_PULLUP */
- 0x198 0x100 /* MCSPI1_CLK, MODE0 | INPUT */
- 0x19a 0x000 /* MCSPI1_SIMO, MODE0 | OUTPUT */
- 0x19c 0x100 /* MCSPI1_SOMI, MODE0 | INPUT */
- 0x19e 0x000 /* MCSPI1_CS0, MODE0 | OUTPUT */
- 0x1a0 0x000 /* MCSPI1_CS1, MODE0 | OUTPUT */
+ 0x198 0x100 /* MCSPI1_CLK, MODE0 | INPUT */
+ 0x19a 0x000 /* MCSPI1_SIMO, MODE0 | OUTPUT */
+ 0x19c 0x100 /* MCSPI1_SOMI, MODE0 | INPUT */
+ 0x19e 0x000 /* MCSPI1_CS0, MODE0 | OUTPUT */
+ 0x1a0 0x000 /* MCSPI1_CS1, MODE0 | OUTPUT */
0x1a6 0x100 /* MCSPI2_CLK, MODE0 | INPUT */
0x1a8 0x000 /* MCSPI2_SIMO, MODE0 | OUTPUT */
0x1aa 0x100 /* MCSPI2_SOMI, MODE0 | INPUT */
diff --git a/arch/arm/configs/eng_minnow_defconfig b/arch/arm/configs/eng_minnow_defconfig
index 1e50ba81cac..96ee2200888 100644
--- a/arch/arm/configs/eng_minnow_defconfig
+++ b/arch/arm/configs/eng_minnow_defconfig
@@ -959,6 +959,7 @@ CONFIG_VIB_GPIO=y
# CONFIG_USB_SWITCH_FSA9480 is not set
# CONFIG_LATTICE_ECP3_CONFIG is not set
# CONFIG_SRAM is not set
+CONFIG_C55_CTRL=y
# CONFIG_C2PORT is not set
#
diff --git a/drivers/misc/c55_ctrl.c b/drivers/misc/c55_ctrl.c
index 04f29d3ff9a..3c116987e3d 100644
--- a/drivers/misc/c55_ctrl.c
+++ b/drivers/misc/c55_ctrl.c
@@ -17,6 +17,7 @@
#include <linux/irq.h>
#include <linux/module.h>
#include <linux/platform_device.h>
+#include <linux/regulator/consumer.h>
#include <linux/slab.h>
#include <linux/wakelock.h>
#include <linux/of.h>
@@ -26,6 +27,7 @@
struct c55_ctrl_data {
int int_gpio;
struct wake_lock wake_lock;
+ struct regulator *reg;
};
#define NUM_GPIOS 3
@@ -138,6 +140,17 @@ static int c55_ctrl_probe(struct platform_device *pdev)
return ret;
}
+ cdata->reg = regulator_get(&pdev->dev, "c55-ctrl");
+ if (IS_ERR(cdata->reg)) {
+ return PTR_ERR(cdata->reg);
+ }
+ ret = regulator_enable(cdata->reg);
+ if (ret) {
+ dev_err(&pdev->dev, "%s: c55_ctrl regulator_enable failed.\n", __func__);
+ regulator_put(cdata->reg);
+ return ret;
+ }
+
wake_lock_init(&cdata->wake_lock, WAKE_LOCK_SUSPEND, "c55_ctrl");
platform_set_drvdata(pdev, cdata);
@@ -146,6 +159,9 @@ static int c55_ctrl_probe(struct platform_device *pdev)
static int c55_ctrl_remove(struct platform_device *pdev)
{
+ struct c55_ctrl_data *cdata = platform_get_drvdata(pdev);
+
+ regulator_put(cdata->reg);
return 0;
}
diff --git a/drivers/regulator/tps65912-regulator.c b/drivers/regulator/tps65912-regulator.c
index 4a27de44d3c..4e19cc80cfa 100644
--- a/drivers/regulator/tps65912-regulator.c
+++ b/drivers/regulator/tps65912-regulator.c
@@ -274,7 +274,7 @@ static int tps65912_reg_enable(struct regulator_dev *dev)
struct tps65912_reg *pmic = rdev_get_drvdata(dev);
struct tps65912 *mfd = pmic->mfd;
int id = rdev_get_id(dev);
- int reg;
+ int reg, lsw;
if (id < TPS65912_REG_DCDC1 || id > TPS65912_REG_LDO10)
return -EINVAL;
@@ -283,6 +283,13 @@ static int tps65912_reg_enable(struct regulator_dev *dev)
if (reg < 0)
return reg;
+ if (id == TPS65912_REG_LDO9) {
+ lsw = tps65912_reg_read(mfd, TPS65912_LOADSWITCH);
+ lsw &= ~LOADSWITCH_MASK;
+ lsw |= LOADSWITCH_ENABLE;
+ tps65912_reg_write(mfd, TPS65912_LOADSWITCH, lsw);
+ }
+
return tps65912_set_bits(mfd, reg, TPS65912_REG_ENABLED);
}
@@ -290,12 +297,18 @@ static int tps65912_reg_disable(struct regulator_dev *dev)
{
struct tps65912_reg *pmic = rdev_get_drvdata(dev);
struct tps65912 *mfd = pmic->mfd;
- int id = rdev_get_id(dev), reg;
+ int id = rdev_get_id(dev), reg, lsw;
reg = pmic->get_ctrl_reg(id);
if (reg < 0)
return reg;
+ if (id == TPS65912_REG_LDO9) {
+ lsw = tps65912_reg_read(mfd, TPS65912_LOADSWITCH);
+ lsw &= ~LOADSWITCH_MASK;
+ lsw |= LOADSWITCH_DISABLE;
+ tps65912_reg_write(mfd, TPS65912_LOADSWITCH, lsw);
+ }
return tps65912_clear_bits(mfd, reg, TPS65912_REG_ENABLED);
}
diff --git a/include/linux/mfd/tps65912.h b/include/linux/mfd/tps65912.h
index 7b38617e041..6cf7245e770 100644
--- a/include/linux/mfd/tps65912.h
+++ b/include/linux/mfd/tps65912.h
@@ -264,6 +264,11 @@
#define DCDC_LIMIT_MAX_SEL_MASK 0x3F
#define DCDC_LIMIT_MAX_SEL_SHIFT 0
+/* Register LOADSWITCH */
+#define LOADSWITCH_MASK 0x03
+#define LOADSWITCH_DISABLE 0
+#define LOADSWITCH_ENABLE 1
+
/* Number of step-down converters available */
#define TPS65912_NUM_DCDC 4