aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd/wm5102-tables.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-12-16 21:55:20 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2012-12-16 21:55:20 -0500
commit2dfea3803dcf70983d14ce1dcbb3e97a7459a28b (patch)
tree59bffc7389ff554585f79d7cc06021790dc2b317 /drivers/mfd/wm5102-tables.c
parentaed606e3bc1f10753254db308d3fd8c053c41328 (diff)
parent1881b68b8961a86d40c3c5c205e533515a2dc9c6 (diff)
Merge tag 'mfd-3.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6
Pull MFS update from Samuel Ortiz: "This is the MFD patch set for the 3.8 merge window. We have several new drivers, most of the time coming with their sub devices drivers: - Austria Microsystem's AS3711 - Nano River's viperboard - TI's TPS80031, AM335x TS/ADC, - Realtek's MMC/memstick card reader - Nokia's retu We also got some notable cleanups and improvements: - tps6586x got converted to IRQ domains. - tps65910 and tps65090 moved to the regmap IRQ API. - STMPE is now Device Tree aware. - A general twl6040 and twl-core cleanup, with moves to the regmap I/O and IRQ APIs and a conversion to the recently added PWM framework. - sta2x11 gained regmap support. Then the rest is mostly tiny cleanups and fixes, among which we have Mark's wm5xxx and wm8xxx patchset." Far amount of annoying but largely trivial conflicts. Many due to __devinit/exit removal, others due to one or two of the new drivers also having come in through another tree. * tag 'mfd-3.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6: (119 commits) mfd: tps6507x: Convert to devm_kzalloc mfd: stmpe: Update DT support for stmpe driver mfd: wm5102: Add readback of DSP status 3 register mfd: arizona: Log if we fail to create the primary IRQ domain mfd: tps80031: MFD_TPS80031 needs to select REGMAP_IRQ mfd: tps80031: Add terminating entry for tps80031_id_table mfd: sta2x11: Fix potential NULL pointer dereference in __sta2x11_mfd_mask() mfd: wm5102: Add tuning for revision B mfd: arizona: Defer patch initialistation until after first device boot mfd: tps65910: Fix wrong ack_base register mfd: tps65910: Remove unused data mfd: stmpe: Get rid of irq_invert_polarity mfd: ab8500-core: Fix invalid free of devm_ allocated data mfd: wm5102: Mark DSP memory regions as volatile mfd: wm5102: Correct default for LDO1_CONTROL_2 mfd: arizona: Register haptics devices mfd: wm8994: Make current device behaviour the default mfd: tps65090: MFD_TPS65090 needs to select REGMAP_IRQ mfd: Fix stmpe.c build when OF is not enabled mfd: jz4740-adc: Use devm_kzalloc ...
Diffstat (limited to 'drivers/mfd/wm5102-tables.c')
-rw-r--r--drivers/mfd/wm5102-tables.c35
1 files changed, 32 insertions, 3 deletions
diff --git a/drivers/mfd/wm5102-tables.c b/drivers/mfd/wm5102-tables.c
index 3141c4a173a7..088872ab6338 100644
--- a/drivers/mfd/wm5102-tables.c
+++ b/drivers/mfd/wm5102-tables.c
@@ -56,6 +56,18 @@ static const struct reg_default wm5102_reva_patch[] = {
56 { 0x80, 0x0000 }, 56 { 0x80, 0x0000 },
57}; 57};
58 58
59static const struct reg_default wm5102_revb_patch[] = {
60 { 0x80, 0x0003 },
61 { 0x081, 0xE022 },
62 { 0x410, 0x6080 },
63 { 0x418, 0x6080 },
64 { 0x420, 0x6080 },
65 { 0x428, 0xC000 },
66 { 0x441, 0x8014 },
67 { 0x458, 0x000b },
68 { 0x80, 0x0000 },
69};
70
59/* We use a function so we can use ARRAY_SIZE() */ 71/* We use a function so we can use ARRAY_SIZE() */
60int wm5102_patch(struct arizona *arizona) 72int wm5102_patch(struct arizona *arizona)
61{ 73{
@@ -65,7 +77,9 @@ int wm5102_patch(struct arizona *arizona)
65 wm5102_reva_patch, 77 wm5102_reva_patch,
66 ARRAY_SIZE(wm5102_reva_patch)); 78 ARRAY_SIZE(wm5102_reva_patch));
67 default: 79 default:
68 return 0; 80 return regmap_register_patch(arizona->regmap,
81 wm5102_revb_patch,
82 ARRAY_SIZE(wm5102_revb_patch));
69 } 83 }
70} 84}
71 85
@@ -291,6 +305,7 @@ static const struct reg_default wm5102_reg_default[] = {
291 { 0x000001AA, 0x0004 }, /* R426 - FLL2 GPIO Clock */ 305 { 0x000001AA, 0x0004 }, /* R426 - FLL2 GPIO Clock */
292 { 0x00000200, 0x0006 }, /* R512 - Mic Charge Pump 1 */ 306 { 0x00000200, 0x0006 }, /* R512 - Mic Charge Pump 1 */
293 { 0x00000210, 0x00D4 }, /* R528 - LDO1 Control 1 */ 307 { 0x00000210, 0x00D4 }, /* R528 - LDO1 Control 1 */
308 { 0x00000212, 0x0001 }, /* R530 - LDO1 Control 2 */
294 { 0x00000213, 0x0344 }, /* R531 - LDO2 Control 1 */ 309 { 0x00000213, 0x0344 }, /* R531 - LDO2 Control 1 */
295 { 0x00000218, 0x01A6 }, /* R536 - Mic Bias Ctrl 1 */ 310 { 0x00000218, 0x01A6 }, /* R536 - Mic Bias Ctrl 1 */
296 { 0x00000219, 0x01A6 }, /* R537 - Mic Bias Ctrl 2 */ 311 { 0x00000219, 0x01A6 }, /* R537 - Mic Bias Ctrl 2 */
@@ -1056,6 +1071,7 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
1056 case ARIZONA_FLL1_CONTROL_5: 1071 case ARIZONA_FLL1_CONTROL_5:
1057 case ARIZONA_FLL1_CONTROL_6: 1072 case ARIZONA_FLL1_CONTROL_6:
1058 case ARIZONA_FLL1_LOOP_FILTER_TEST_1: 1073 case ARIZONA_FLL1_LOOP_FILTER_TEST_1:
1074 case ARIZONA_FLL1_NCO_TEST_0:
1059 case ARIZONA_FLL1_SYNCHRONISER_1: 1075 case ARIZONA_FLL1_SYNCHRONISER_1:
1060 case ARIZONA_FLL1_SYNCHRONISER_2: 1076 case ARIZONA_FLL1_SYNCHRONISER_2:
1061 case ARIZONA_FLL1_SYNCHRONISER_3: 1077 case ARIZONA_FLL1_SYNCHRONISER_3:
@@ -1071,6 +1087,7 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
1071 case ARIZONA_FLL2_CONTROL_5: 1087 case ARIZONA_FLL2_CONTROL_5:
1072 case ARIZONA_FLL2_CONTROL_6: 1088 case ARIZONA_FLL2_CONTROL_6:
1073 case ARIZONA_FLL2_LOOP_FILTER_TEST_1: 1089 case ARIZONA_FLL2_LOOP_FILTER_TEST_1:
1090 case ARIZONA_FLL2_NCO_TEST_0:
1074 case ARIZONA_FLL2_SYNCHRONISER_1: 1091 case ARIZONA_FLL2_SYNCHRONISER_1:
1075 case ARIZONA_FLL2_SYNCHRONISER_2: 1092 case ARIZONA_FLL2_SYNCHRONISER_2:
1076 case ARIZONA_FLL2_SYNCHRONISER_3: 1093 case ARIZONA_FLL2_SYNCHRONISER_3:
@@ -1805,6 +1822,7 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
1805 case ARIZONA_DSP1_CLOCKING_1: 1822 case ARIZONA_DSP1_CLOCKING_1:
1806 case ARIZONA_DSP1_STATUS_1: 1823 case ARIZONA_DSP1_STATUS_1:
1807 case ARIZONA_DSP1_STATUS_2: 1824 case ARIZONA_DSP1_STATUS_2:
1825 case ARIZONA_DSP1_STATUS_3:
1808 return true; 1826 return true;
1809 default: 1827 default:
1810 return false; 1828 return false;
@@ -1813,15 +1831,23 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
1813 1831
1814static bool wm5102_volatile_register(struct device *dev, unsigned int reg) 1832static bool wm5102_volatile_register(struct device *dev, unsigned int reg)
1815{ 1833{
1834 if (reg > 0xffff)
1835 return true;
1836
1816 switch (reg) { 1837 switch (reg) {
1817 case ARIZONA_SOFTWARE_RESET: 1838 case ARIZONA_SOFTWARE_RESET:
1818 case ARIZONA_DEVICE_REVISION: 1839 case ARIZONA_DEVICE_REVISION:
1819 case ARIZONA_OUTPUT_STATUS_1: 1840 case ARIZONA_OUTPUT_STATUS_1:
1841 case ARIZONA_RAW_OUTPUT_STATUS_1:
1842 case ARIZONA_SLIMBUS_RX_PORT_STATUS:
1843 case ARIZONA_SLIMBUS_TX_PORT_STATUS:
1820 case ARIZONA_SAMPLE_RATE_1_STATUS: 1844 case ARIZONA_SAMPLE_RATE_1_STATUS:
1821 case ARIZONA_SAMPLE_RATE_2_STATUS: 1845 case ARIZONA_SAMPLE_RATE_2_STATUS:
1822 case ARIZONA_SAMPLE_RATE_3_STATUS: 1846 case ARIZONA_SAMPLE_RATE_3_STATUS:
1823 case ARIZONA_HAPTICS_STATUS: 1847 case ARIZONA_HAPTICS_STATUS:
1824 case ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS: 1848 case ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS:
1849 case ARIZONA_FLL1_NCO_TEST_0:
1850 case ARIZONA_FLL2_NCO_TEST_0:
1825 case ARIZONA_FX_CTRL2: 1851 case ARIZONA_FX_CTRL2:
1826 case ARIZONA_INTERRUPT_STATUS_1: 1852 case ARIZONA_INTERRUPT_STATUS_1:
1827 case ARIZONA_INTERRUPT_STATUS_2: 1853 case ARIZONA_INTERRUPT_STATUS_2:
@@ -1847,6 +1873,7 @@ static bool wm5102_volatile_register(struct device *dev, unsigned int reg)
1847 case ARIZONA_AOD_IRQ_RAW_STATUS: 1873 case ARIZONA_AOD_IRQ_RAW_STATUS:
1848 case ARIZONA_DSP1_STATUS_1: 1874 case ARIZONA_DSP1_STATUS_1:
1849 case ARIZONA_DSP1_STATUS_2: 1875 case ARIZONA_DSP1_STATUS_2:
1876 case ARIZONA_DSP1_STATUS_3:
1850 case ARIZONA_HEADPHONE_DETECT_2: 1877 case ARIZONA_HEADPHONE_DETECT_2:
1851 case ARIZONA_MIC_DETECT_3: 1878 case ARIZONA_MIC_DETECT_3:
1852 return true; 1879 return true;
@@ -1855,12 +1882,14 @@ static bool wm5102_volatile_register(struct device *dev, unsigned int reg)
1855 } 1882 }
1856} 1883}
1857 1884
1885#define WM5102_MAX_REGISTER 0x1a8fff
1886
1858const struct regmap_config wm5102_spi_regmap = { 1887const struct regmap_config wm5102_spi_regmap = {
1859 .reg_bits = 32, 1888 .reg_bits = 32,
1860 .pad_bits = 16, 1889 .pad_bits = 16,
1861 .val_bits = 16, 1890 .val_bits = 16,
1862 1891
1863 .max_register = ARIZONA_DSP1_STATUS_2, 1892 .max_register = WM5102_MAX_REGISTER,
1864 .readable_reg = wm5102_readable_register, 1893 .readable_reg = wm5102_readable_register,
1865 .volatile_reg = wm5102_volatile_register, 1894 .volatile_reg = wm5102_volatile_register,
1866 1895
@@ -1874,7 +1903,7 @@ const struct regmap_config wm5102_i2c_regmap = {
1874 .reg_bits = 32, 1903 .reg_bits = 32,
1875 .val_bits = 16, 1904 .val_bits = 16,
1876 1905
1877 .max_register = ARIZONA_DSP1_STATUS_2, 1906 .max_register = WM5102_MAX_REGISTER,
1878 .readable_reg = wm5102_readable_register, 1907 .readable_reg = wm5102_readable_register,
1879 .volatile_reg = wm5102_volatile_register, 1908 .volatile_reg = wm5102_volatile_register,
1880 1909