diff options
author | Kyle Manna <kyle@kylemanna.com> | 2011-08-11 23:33:13 -0400 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2011-10-24 08:09:10 -0400 |
commit | 3d6271f92e98094584fd1e609a9969cd33e61122 (patch) | |
tree | a3091ebc18edf9a2cef177bace2aea8b0b16d8ea | |
parent | 881de67046f424fc3a6e05b1c681c12afd94e802 (diff) |
mfd: Turn on the twl4030-madc MADC clock
Without turning the MADC clock on, no MADC conversions occur.
$ cat /sys/class/hwmon/hwmon0/device/in8_input
[ 53.428436] twl4030_madc twl4030_madc: conversion timeout!
cat: read error: Resource temporarily unavailable
Signed-off-by: Kyle Manna <kyle@kylemanna.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
-rw-r--r-- | drivers/mfd/twl4030-madc.c | 22 | ||||
-rw-r--r-- | include/linux/i2c/twl4030-madc.h | 4 |
2 files changed, 26 insertions, 0 deletions
diff --git a/drivers/mfd/twl4030-madc.c b/drivers/mfd/twl4030-madc.c index 7cbf2aa9e64f..834f824d3c11 100644 --- a/drivers/mfd/twl4030-madc.c +++ b/drivers/mfd/twl4030-madc.c | |||
@@ -740,6 +740,28 @@ static int __devinit twl4030_madc_probe(struct platform_device *pdev) | |||
740 | TWL4030_BCI_BCICTL1); | 740 | TWL4030_BCI_BCICTL1); |
741 | goto err_i2c; | 741 | goto err_i2c; |
742 | } | 742 | } |
743 | |||
744 | /* Check that MADC clock is on */ | ||
745 | ret = twl_i2c_read_u8(TWL4030_MODULE_INTBR, ®val, TWL4030_REG_GPBR1); | ||
746 | if (ret) { | ||
747 | dev_err(&pdev->dev, "unable to read reg GPBR1 0x%X\n", | ||
748 | TWL4030_REG_GPBR1); | ||
749 | goto err_i2c; | ||
750 | } | ||
751 | |||
752 | /* If MADC clk is not on, turn it on */ | ||
753 | if (!(regval & TWL4030_GPBR1_MADC_HFCLK_EN)) { | ||
754 | dev_info(&pdev->dev, "clk disabled, enabling\n"); | ||
755 | regval |= TWL4030_GPBR1_MADC_HFCLK_EN; | ||
756 | ret = twl_i2c_write_u8(TWL4030_MODULE_INTBR, regval, | ||
757 | TWL4030_REG_GPBR1); | ||
758 | if (ret) { | ||
759 | dev_err(&pdev->dev, "unable to write reg GPBR1 0x%X\n", | ||
760 | TWL4030_REG_GPBR1); | ||
761 | goto err_i2c; | ||
762 | } | ||
763 | } | ||
764 | |||
743 | platform_set_drvdata(pdev, madc); | 765 | platform_set_drvdata(pdev, madc); |
744 | mutex_init(&madc->lock); | 766 | mutex_init(&madc->lock); |
745 | ret = request_threaded_irq(platform_get_irq(pdev, 0), NULL, | 767 | ret = request_threaded_irq(platform_get_irq(pdev, 0), NULL, |
diff --git a/include/linux/i2c/twl4030-madc.h b/include/linux/i2c/twl4030-madc.h index 6427d298fbfc..530e11ba0738 100644 --- a/include/linux/i2c/twl4030-madc.h +++ b/include/linux/i2c/twl4030-madc.h | |||
@@ -129,6 +129,10 @@ enum sample_type { | |||
129 | #define REG_BCICTL2 0x024 | 129 | #define REG_BCICTL2 0x024 |
130 | #define TWL4030_BCI_ITHSENS 0x007 | 130 | #define TWL4030_BCI_ITHSENS 0x007 |
131 | 131 | ||
132 | /* Register and bits for GPBR1 register */ | ||
133 | #define TWL4030_REG_GPBR1 0x0c | ||
134 | #define TWL4030_GPBR1_MADC_HFCLK_EN (1 << 7) | ||
135 | |||
132 | struct twl4030_madc_user_parms { | 136 | struct twl4030_madc_user_parms { |
133 | int channel; | 137 | int channel; |
134 | int average; | 138 | int average; |