Message ID | 1407926567-10047-1-git-send-email-ckeepax@opensource.wolfsonmicro.com |
---|---|
State | Accepted |
Commit | 48018943eb906d81e48f40675c17b92abfeafcf1 |
Headers | show |
On Wed, 13 Aug 2014, Charles Keepax wrote: > From: Mark Brown <broonie@linaro.org> > > During init the core checks if the wm5102 has finished starting by reading > register 0x19 and looking at the value. This read always fails since this > is not a readable register, mark it as being one. While we're at it provide > a constant for the register name (as supplied by Charles Keepax). > > Signed-off-by: Mark Brown <broonie@linaro.org> > Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> > --- > > Just added the sign-off I forgot on the last version. > > Thanks, > Charles > > drivers/mfd/arizona-core.c | 3 ++- > drivers/mfd/wm5102-tables.c | 1 + > include/linux/mfd/arizona/registers.h | 1 + > 3 files changed, 4 insertions(+), 1 deletions(-) Applied, thanks. > diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c > index 10a0cb9..7eabc36 100644 > --- a/drivers/mfd/arizona-core.c > +++ b/drivers/mfd/arizona-core.c > @@ -784,7 +784,8 @@ int arizona_dev_init(struct arizona *arizona) > /* Ensure device startup is complete */ > switch (arizona->type) { > case WM5102: > - ret = regmap_read(arizona->regmap, 0x19, &val); > + ret = regmap_read(arizona->regmap, > + ARIZONA_WRITE_SEQUENCER_CTRL_3, &val); > if (ret != 0) > dev_err(dev, > "Failed to check write sequencer state: %d\n", > diff --git a/drivers/mfd/wm5102-tables.c b/drivers/mfd/wm5102-tables.c > index fb4d4bb..c18d527 100644 > --- a/drivers/mfd/wm5102-tables.c > +++ b/drivers/mfd/wm5102-tables.c > @@ -1016,6 +1016,7 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg) > case ARIZONA_WRITE_SEQUENCER_CTRL_0: > case ARIZONA_WRITE_SEQUENCER_CTRL_1: > case ARIZONA_WRITE_SEQUENCER_CTRL_2: > + case ARIZONA_WRITE_SEQUENCER_CTRL_3: > case ARIZONA_WRITE_SEQUENCER_PROM: > case ARIZONA_TONE_GENERATOR_1: > case ARIZONA_TONE_GENERATOR_2: > diff --git a/include/linux/mfd/arizona/registers.h b/include/linux/mfd/arizona/registers.h > index dbd23c3..68913ec 100644 > --- a/include/linux/mfd/arizona/registers.h > +++ b/include/linux/mfd/arizona/registers.h > @@ -27,6 +27,7 @@ > #define ARIZONA_WRITE_SEQUENCER_CTRL_0 0x16 > #define ARIZONA_WRITE_SEQUENCER_CTRL_1 0x17 > #define ARIZONA_WRITE_SEQUENCER_CTRL_2 0x18 > +#define ARIZONA_WRITE_SEQUENCER_CTRL_3 0x19 > #define ARIZONA_WRITE_SEQUENCER_PROM 0x1A > #define ARIZONA_TONE_GENERATOR_1 0x20 > #define ARIZONA_TONE_GENERATOR_2 0x21
On Wed, 13 Aug 2014, Charles Keepax wrote: > Mark some additional registers as volatile. The write sequencer control > registers should not be cached, as we don't ever want their value > synchronised as this might cause a write sequence to be accidentally > initiated. > > Additionally, the DAC_COMP registers require special preconditions to > write so there values wouldn't be updated accurately during a register > sync. > > Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> > --- > drivers/mfd/wm5102-tables.c | 11 ++++++++--- > drivers/mfd/wm5110-tables.c | 6 +++--- > 2 files changed, 11 insertions(+), 6 deletions(-) Applied, thanks. > diff --git a/drivers/mfd/wm5102-tables.c b/drivers/mfd/wm5102-tables.c > index c18d527..191f224 100644 > --- a/drivers/mfd/wm5102-tables.c > +++ b/drivers/mfd/wm5102-tables.c > @@ -245,9 +245,6 @@ const struct regmap_irq_chip wm5102_irq = { > static const struct reg_default wm5102_reg_default[] = { > { 0x00000008, 0x0019 }, /* R8 - Ctrl IF SPI CFG 1 */ > { 0x00000009, 0x0001 }, /* R9 - Ctrl IF I2C1 CFG 1 */ > - { 0x00000016, 0x0000 }, /* R22 - Write Sequencer Ctrl 0 */ > - { 0x00000017, 0x0000 }, /* R23 - Write Sequencer Ctrl 1 */ > - { 0x00000018, 0x0000 }, /* R24 - Write Sequencer Ctrl 2 */ > { 0x00000020, 0x0000 }, /* R32 - Tone Generator 1 */ > { 0x00000021, 0x1000 }, /* R33 - Tone Generator 2 */ > { 0x00000022, 0x0000 }, /* R34 - Tone Generator 3 */ > @@ -1881,6 +1878,10 @@ static bool wm5102_volatile_register(struct device *dev, unsigned int reg) > switch (reg) { > case ARIZONA_SOFTWARE_RESET: > case ARIZONA_DEVICE_REVISION: > + case ARIZONA_WRITE_SEQUENCER_CTRL_0: > + case ARIZONA_WRITE_SEQUENCER_CTRL_1: > + case ARIZONA_WRITE_SEQUENCER_CTRL_2: > + case ARIZONA_WRITE_SEQUENCER_CTRL_3: > case ARIZONA_OUTPUT_STATUS_1: > case ARIZONA_RAW_OUTPUT_STATUS_1: > case ARIZONA_SLIMBUS_RX_PORT_STATUS: > @@ -1892,6 +1893,10 @@ static bool wm5102_volatile_register(struct device *dev, unsigned int reg) > case ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS: > case ARIZONA_FLL1_NCO_TEST_0: > case ARIZONA_FLL2_NCO_TEST_0: > + case ARIZONA_DAC_COMP_1: > + case ARIZONA_DAC_COMP_2: > + case ARIZONA_DAC_COMP_3: > + case ARIZONA_DAC_COMP_4: > case ARIZONA_FX_CTRL2: > case ARIZONA_INTERRUPT_STATUS_1: > case ARIZONA_INTERRUPT_STATUS_2: > diff --git a/drivers/mfd/wm5110-tables.c b/drivers/mfd/wm5110-tables.c > index 9b98ee5..beae0a3 100644 > --- a/drivers/mfd/wm5110-tables.c > +++ b/drivers/mfd/wm5110-tables.c > @@ -666,9 +666,6 @@ static const struct reg_default wm5110_reg_default[] = { > { 0x0000000A, 0x0001 }, /* R10 - Ctrl IF I2C2 CFG 1 */ > { 0x0000000B, 0x0036 }, /* R11 - Ctrl IF I2C1 CFG 2 */ > { 0x0000000C, 0x0036 }, /* R12 - Ctrl IF I2C2 CFG 2 */ > - { 0x00000016, 0x0000 }, /* R22 - Write Sequencer Ctrl 0 */ > - { 0x00000017, 0x0000 }, /* R23 - Write Sequencer Ctrl 1 */ > - { 0x00000018, 0x0000 }, /* R24 - Write Sequencer Ctrl 2 */ > { 0x00000020, 0x0000 }, /* R32 - Tone Generator 1 */ > { 0x00000021, 0x1000 }, /* R33 - Tone Generator 2 */ > { 0x00000022, 0x0000 }, /* R34 - Tone Generator 3 */ > @@ -2815,6 +2812,9 @@ static bool wm5110_volatile_register(struct device *dev, unsigned int reg) > switch (reg) { > case ARIZONA_SOFTWARE_RESET: > case ARIZONA_DEVICE_REVISION: > + case ARIZONA_WRITE_SEQUENCER_CTRL_0: > + case ARIZONA_WRITE_SEQUENCER_CTRL_1: > + case ARIZONA_WRITE_SEQUENCER_CTRL_2: > case ARIZONA_HAPTICS_STATUS: > case ARIZONA_SAMPLE_RATE_1_STATUS: > case ARIZONA_SAMPLE_RATE_2_STATUS:
diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c index 10a0cb9..7eabc36 100644 --- a/drivers/mfd/arizona-core.c +++ b/drivers/mfd/arizona-core.c @@ -784,7 +784,8 @@ int arizona_dev_init(struct arizona *arizona) /* Ensure device startup is complete */ switch (arizona->type) { case WM5102: - ret = regmap_read(arizona->regmap, 0x19, &val); + ret = regmap_read(arizona->regmap, + ARIZONA_WRITE_SEQUENCER_CTRL_3, &val); if (ret != 0) dev_err(dev, "Failed to check write sequencer state: %d\n", diff --git a/drivers/mfd/wm5102-tables.c b/drivers/mfd/wm5102-tables.c index fb4d4bb..c18d527 100644 --- a/drivers/mfd/wm5102-tables.c +++ b/drivers/mfd/wm5102-tables.c @@ -1016,6 +1016,7 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg) case ARIZONA_WRITE_SEQUENCER_CTRL_0: case ARIZONA_WRITE_SEQUENCER_CTRL_1: case ARIZONA_WRITE_SEQUENCER_CTRL_2: + case ARIZONA_WRITE_SEQUENCER_CTRL_3: case ARIZONA_WRITE_SEQUENCER_PROM: case ARIZONA_TONE_GENERATOR_1: case ARIZONA_TONE_GENERATOR_2: diff --git a/include/linux/mfd/arizona/registers.h b/include/linux/mfd/arizona/registers.h index dbd23c3..68913ec 100644 --- a/include/linux/mfd/arizona/registers.h +++ b/include/linux/mfd/arizona/registers.h @@ -27,6 +27,7 @@ #define ARIZONA_WRITE_SEQUENCER_CTRL_0 0x16 #define ARIZONA_WRITE_SEQUENCER_CTRL_1 0x17 #define ARIZONA_WRITE_SEQUENCER_CTRL_2 0x18 +#define ARIZONA_WRITE_SEQUENCER_CTRL_3 0x19 #define ARIZONA_WRITE_SEQUENCER_PROM 0x1A #define ARIZONA_TONE_GENERATOR_1 0x20 #define ARIZONA_TONE_GENERATOR_2 0x21