Re: [PATCH 03/16] mfd: madera: Register map tables for Cirrus Logic CS47L35

2017-04-12 Thread Lee Jones
On Wed, 05 Apr 2017, Richard Fitzgerald wrote:

> Regmap configuration tables for Cirrus Logic CS47L35 codecs.
> 
> Signed-off-by: Piotr Stankiewicz 
> Signed-off-by: Richard Fitzgerald 
> Signed-off-by: Charles Keepax 
> ---
>  drivers/mfd/Kconfig  |6 +
>  drivers/mfd/Makefile |3 +
>  drivers/mfd/cs47l35-tables.c | 1688 
> ++
>  3 files changed, 1697 insertions(+)
>  create mode 100644 drivers/mfd/cs47l35-tables.c
> 
> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> index f0f9979..5aa62f4 100644
> --- a/drivers/mfd/Kconfig
> +++ b/drivers/mfd/Kconfig
> @@ -226,6 +226,12 @@ config MFD_MADERA_SPI
> Support for the Cirrus Logic Madera platform audio SoC
> core functionality controlled via SPI.
>  
> +config MFD_CS47L35
> + bool "Cirrus Logic CS47L35"
> + depends on MFD_MADERA
> + help
> +   Support for Cirrus Logic CS47L35 Smart Codec
> +
>  config MFD_ASIC3
>   bool "Compaq ASIC3"
>   depends on GPIOLIB && ARM
> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> index c41f6c9..c14a86d 100644
> --- a/drivers/mfd/Makefile
> +++ b/drivers/mfd/Makefile
> @@ -73,6 +73,9 @@ wm8994-objs := wm8994-core.o wm8994-irq.o 
> wm8994-regmap.o
>  obj-$(CONFIG_MFD_WM8994) += wm8994.o
>  
>  obj-$(CONFIG_MFD_MADERA) += madera-core.o
> +ifeq ($(CONFIG_MFD_CS47L35),y)
> +obj-$(CONFIG_MFD_MADERA) += cs47l35-tables.o
> +endif
>  obj-$(CONFIG_MFD_MADERA_I2C) += madera-i2c.o
>  obj-$(CONFIG_MFD_MADERA_SPI) += madera-spi.o
>  
> diff --git a/drivers/mfd/cs47l35-tables.c b/drivers/mfd/cs47l35-tables.c
> new file mode 100644
> index 000..1336c60
> --- /dev/null
> +++ b/drivers/mfd/cs47l35-tables.c
> @@ -0,0 +1,1688 @@
> +/*
> + * Regmap tables for CS47L35 codec
> + *
> + * Copyright 2015-2016 Cirrus Logic

Nit: This needs updating.

Apart from that:

For my own reference:
  Acked-for-MFD-by: Lee Jones 
  
> + * Author: Piotr Stankiewicz 
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#include 
> +#include 
> +#include 
> +
> +#include 
> +#include 
> +
> +#include "madera.h"
> +
> +static const struct reg_sequence cs47l35_reva_16_patch[] = {
> + { 0x460, 0x0c40 },
> + { 0x461, 0xcd1a },
> + { 0x462, 0x0c40 },
> + { 0x463, 0xb53b },
> + { 0x464, 0x0c40 },
> + { 0x465, 0x7503 },
> + { 0x466, 0x0c40 },
> + { 0x467, 0x4a41 },
> + { 0x468, 0x0041 },
> + { 0x469, 0x3491 },
> + { 0x46a, 0x0841 },
> + { 0x46b, 0x1f50 },
> + { 0x46c, 0x0446 },
> + { 0x46d, 0x14ed },
> + { 0x46e, 0x0446 },
> + { 0x46f, 0x1455 },
> + { 0x470, 0x04c6 },
> + { 0x471, 0x1220 },
> + { 0x472, 0x04c6 },
> + { 0x473, 0x040f },
> + { 0x474, 0x04ce },
> + { 0x475, 0x0339 },
> + { 0x476, 0x05df },
> + { 0x477, 0x028f },
> + { 0x478, 0x05df },
> + { 0x479, 0x0209 },
> + { 0x47a, 0x05df },
> + { 0x47b, 0x00cf },
> + { 0x47c, 0x05df },
> + { 0x47d, 0x0001 },
> + { 0x47e, 0x07ff },
> +};
> +
> +int cs47l35_patch(struct madera *madera)
> +{
> + int ret;
> +
> + ret = regmap_register_patch(madera->regmap, cs47l35_reva_16_patch,
> + ARRAY_SIZE(cs47l35_reva_16_patch));
> + if (ret < 0)
> + dev_err(madera->dev, "Error applying patch: %d\n", ret);
> +
> + return ret;
> +}
> +EXPORT_SYMBOL_GPL(cs47l35_patch);
> +
> +static const struct reg_default cs47l35_reg_default[] = {
> + { 0x0020, 0x }, /* R32 (0x20) - Tone Generator 1 */
> + { 0x0021, 0x1000 }, /* R33 (0x21) - Tone Generator 2 */
> + { 0x0022, 0x }, /* R34 (0x22) - Tone Generator 3 */
> + { 0x0023, 0x1000 }, /* R35 (0x23) - Tone Generator 4 */
> + { 0x0024, 0x }, /* R36 (0x24) - Tone Generator 5 */
> + { 0x0030, 0x }, /* R48 (0x30) - PWM Drive 1 */
> + { 0x0031, 0x0100 }, /* R49 (0x31) - PWM Drive 2 */
> + { 0x0032, 0x0100 }, /* R50 (0x32) - PWM Drive 3 */
> + { 0x0061, 0x01ff }, /* R97 (0x61) - Sample Rate Sequence Select 1 */
> + { 0x0062, 0x01ff }, /* R98 (0x62) - Sample Rate Sequence Select 2 */
> + { 0x0063, 0x01ff }, /* R99 (0x63) - Sample Rate Sequence Select 3 */
> + { 0x0064, 0x01ff }, /* R100 (0x64) - Sample Rate Sequence Select 4*/
> + { 0x0066, 0x01ff }, /* R102 (0x66) - Always On Triggers Sequence 
> Select 1*/
> + { 0x0067, 0x01ff }, /* R103 (0x67) - Always On Triggers Sequence 
> Select 2*/
> + { 0x0090, 0x }, /* R144 (0x90) - Haptics Control 1 */
> + { 0x0091, 0x7fff }, /* R145 (0x91) - Haptics Control 2 

Re: [PATCH 03/16] mfd: madera: Register map tables for Cirrus Logic CS47L35

2017-04-12 Thread Lee Jones
On Wed, 05 Apr 2017, Richard Fitzgerald wrote:

> Regmap configuration tables for Cirrus Logic CS47L35 codecs.
> 
> Signed-off-by: Piotr Stankiewicz 
> Signed-off-by: Richard Fitzgerald 
> Signed-off-by: Charles Keepax 
> ---
>  drivers/mfd/Kconfig  |6 +
>  drivers/mfd/Makefile |3 +
>  drivers/mfd/cs47l35-tables.c | 1688 
> ++
>  3 files changed, 1697 insertions(+)
>  create mode 100644 drivers/mfd/cs47l35-tables.c
> 
> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> index f0f9979..5aa62f4 100644
> --- a/drivers/mfd/Kconfig
> +++ b/drivers/mfd/Kconfig
> @@ -226,6 +226,12 @@ config MFD_MADERA_SPI
> Support for the Cirrus Logic Madera platform audio SoC
> core functionality controlled via SPI.
>  
> +config MFD_CS47L35
> + bool "Cirrus Logic CS47L35"
> + depends on MFD_MADERA
> + help
> +   Support for Cirrus Logic CS47L35 Smart Codec
> +
>  config MFD_ASIC3
>   bool "Compaq ASIC3"
>   depends on GPIOLIB && ARM
> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> index c41f6c9..c14a86d 100644
> --- a/drivers/mfd/Makefile
> +++ b/drivers/mfd/Makefile
> @@ -73,6 +73,9 @@ wm8994-objs := wm8994-core.o wm8994-irq.o 
> wm8994-regmap.o
>  obj-$(CONFIG_MFD_WM8994) += wm8994.o
>  
>  obj-$(CONFIG_MFD_MADERA) += madera-core.o
> +ifeq ($(CONFIG_MFD_CS47L35),y)
> +obj-$(CONFIG_MFD_MADERA) += cs47l35-tables.o
> +endif
>  obj-$(CONFIG_MFD_MADERA_I2C) += madera-i2c.o
>  obj-$(CONFIG_MFD_MADERA_SPI) += madera-spi.o
>  
> diff --git a/drivers/mfd/cs47l35-tables.c b/drivers/mfd/cs47l35-tables.c
> new file mode 100644
> index 000..1336c60
> --- /dev/null
> +++ b/drivers/mfd/cs47l35-tables.c
> @@ -0,0 +1,1688 @@
> +/*
> + * Regmap tables for CS47L35 codec
> + *
> + * Copyright 2015-2016 Cirrus Logic

Nit: This needs updating.

Apart from that:

For my own reference:
  Acked-for-MFD-by: Lee Jones 
  
> + * Author: Piotr Stankiewicz 
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#include 
> +#include 
> +#include 
> +
> +#include 
> +#include 
> +
> +#include "madera.h"
> +
> +static const struct reg_sequence cs47l35_reva_16_patch[] = {
> + { 0x460, 0x0c40 },
> + { 0x461, 0xcd1a },
> + { 0x462, 0x0c40 },
> + { 0x463, 0xb53b },
> + { 0x464, 0x0c40 },
> + { 0x465, 0x7503 },
> + { 0x466, 0x0c40 },
> + { 0x467, 0x4a41 },
> + { 0x468, 0x0041 },
> + { 0x469, 0x3491 },
> + { 0x46a, 0x0841 },
> + { 0x46b, 0x1f50 },
> + { 0x46c, 0x0446 },
> + { 0x46d, 0x14ed },
> + { 0x46e, 0x0446 },
> + { 0x46f, 0x1455 },
> + { 0x470, 0x04c6 },
> + { 0x471, 0x1220 },
> + { 0x472, 0x04c6 },
> + { 0x473, 0x040f },
> + { 0x474, 0x04ce },
> + { 0x475, 0x0339 },
> + { 0x476, 0x05df },
> + { 0x477, 0x028f },
> + { 0x478, 0x05df },
> + { 0x479, 0x0209 },
> + { 0x47a, 0x05df },
> + { 0x47b, 0x00cf },
> + { 0x47c, 0x05df },
> + { 0x47d, 0x0001 },
> + { 0x47e, 0x07ff },
> +};
> +
> +int cs47l35_patch(struct madera *madera)
> +{
> + int ret;
> +
> + ret = regmap_register_patch(madera->regmap, cs47l35_reva_16_patch,
> + ARRAY_SIZE(cs47l35_reva_16_patch));
> + if (ret < 0)
> + dev_err(madera->dev, "Error applying patch: %d\n", ret);
> +
> + return ret;
> +}
> +EXPORT_SYMBOL_GPL(cs47l35_patch);
> +
> +static const struct reg_default cs47l35_reg_default[] = {
> + { 0x0020, 0x }, /* R32 (0x20) - Tone Generator 1 */
> + { 0x0021, 0x1000 }, /* R33 (0x21) - Tone Generator 2 */
> + { 0x0022, 0x }, /* R34 (0x22) - Tone Generator 3 */
> + { 0x0023, 0x1000 }, /* R35 (0x23) - Tone Generator 4 */
> + { 0x0024, 0x }, /* R36 (0x24) - Tone Generator 5 */
> + { 0x0030, 0x }, /* R48 (0x30) - PWM Drive 1 */
> + { 0x0031, 0x0100 }, /* R49 (0x31) - PWM Drive 2 */
> + { 0x0032, 0x0100 }, /* R50 (0x32) - PWM Drive 3 */
> + { 0x0061, 0x01ff }, /* R97 (0x61) - Sample Rate Sequence Select 1 */
> + { 0x0062, 0x01ff }, /* R98 (0x62) - Sample Rate Sequence Select 2 */
> + { 0x0063, 0x01ff }, /* R99 (0x63) - Sample Rate Sequence Select 3 */
> + { 0x0064, 0x01ff }, /* R100 (0x64) - Sample Rate Sequence Select 4*/
> + { 0x0066, 0x01ff }, /* R102 (0x66) - Always On Triggers Sequence 
> Select 1*/
> + { 0x0067, 0x01ff }, /* R103 (0x67) - Always On Triggers Sequence 
> Select 2*/
> + { 0x0090, 0x }, /* R144 (0x90) - Haptics Control 1 */
> + { 0x0091, 0x7fff }, /* R145 (0x91) - Haptics Control 2 */
> + { 0x0092, 0x }, /* R146 (0x92) - Haptics phase 1 intensity */
> + { 0x0093, 0x }, /* R147 (0x93) - Haptics phase 1 duration */
> + 

[PATCH 03/16] mfd: madera: Register map tables for Cirrus Logic CS47L35

2017-04-05 Thread Richard Fitzgerald
Regmap configuration tables for Cirrus Logic CS47L35 codecs.

Signed-off-by: Piotr Stankiewicz 
Signed-off-by: Richard Fitzgerald 
Signed-off-by: Charles Keepax 
---
 drivers/mfd/Kconfig  |6 +
 drivers/mfd/Makefile |3 +
 drivers/mfd/cs47l35-tables.c | 1688 ++
 3 files changed, 1697 insertions(+)
 create mode 100644 drivers/mfd/cs47l35-tables.c

diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index f0f9979..5aa62f4 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -226,6 +226,12 @@ config MFD_MADERA_SPI
  Support for the Cirrus Logic Madera platform audio SoC
  core functionality controlled via SPI.
 
+config MFD_CS47L35
+   bool "Cirrus Logic CS47L35"
+   depends on MFD_MADERA
+   help
+ Support for Cirrus Logic CS47L35 Smart Codec
+
 config MFD_ASIC3
bool "Compaq ASIC3"
depends on GPIOLIB && ARM
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index c41f6c9..c14a86d 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -73,6 +73,9 @@ wm8994-objs   := wm8994-core.o wm8994-irq.o 
wm8994-regmap.o
 obj-$(CONFIG_MFD_WM8994)   += wm8994.o
 
 obj-$(CONFIG_MFD_MADERA)   += madera-core.o
+ifeq ($(CONFIG_MFD_CS47L35),y)
+obj-$(CONFIG_MFD_MADERA)   += cs47l35-tables.o
+endif
 obj-$(CONFIG_MFD_MADERA_I2C)   += madera-i2c.o
 obj-$(CONFIG_MFD_MADERA_SPI)   += madera-spi.o
 
diff --git a/drivers/mfd/cs47l35-tables.c b/drivers/mfd/cs47l35-tables.c
new file mode 100644
index 000..1336c60
--- /dev/null
+++ b/drivers/mfd/cs47l35-tables.c
@@ -0,0 +1,1688 @@
+/*
+ * Regmap tables for CS47L35 codec
+ *
+ * Copyright 2015-2016 Cirrus Logic
+ *
+ * Author: Piotr Stankiewicz 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+#include "madera.h"
+
+static const struct reg_sequence cs47l35_reva_16_patch[] = {
+   { 0x460, 0x0c40 },
+   { 0x461, 0xcd1a },
+   { 0x462, 0x0c40 },
+   { 0x463, 0xb53b },
+   { 0x464, 0x0c40 },
+   { 0x465, 0x7503 },
+   { 0x466, 0x0c40 },
+   { 0x467, 0x4a41 },
+   { 0x468, 0x0041 },
+   { 0x469, 0x3491 },
+   { 0x46a, 0x0841 },
+   { 0x46b, 0x1f50 },
+   { 0x46c, 0x0446 },
+   { 0x46d, 0x14ed },
+   { 0x46e, 0x0446 },
+   { 0x46f, 0x1455 },
+   { 0x470, 0x04c6 },
+   { 0x471, 0x1220 },
+   { 0x472, 0x04c6 },
+   { 0x473, 0x040f },
+   { 0x474, 0x04ce },
+   { 0x475, 0x0339 },
+   { 0x476, 0x05df },
+   { 0x477, 0x028f },
+   { 0x478, 0x05df },
+   { 0x479, 0x0209 },
+   { 0x47a, 0x05df },
+   { 0x47b, 0x00cf },
+   { 0x47c, 0x05df },
+   { 0x47d, 0x0001 },
+   { 0x47e, 0x07ff },
+};
+
+int cs47l35_patch(struct madera *madera)
+{
+   int ret;
+
+   ret = regmap_register_patch(madera->regmap, cs47l35_reva_16_patch,
+   ARRAY_SIZE(cs47l35_reva_16_patch));
+   if (ret < 0)
+   dev_err(madera->dev, "Error applying patch: %d\n", ret);
+
+   return ret;
+}
+EXPORT_SYMBOL_GPL(cs47l35_patch);
+
+static const struct reg_default cs47l35_reg_default[] = {
+   { 0x0020, 0x }, /* R32 (0x20) - Tone Generator 1 */
+   { 0x0021, 0x1000 }, /* R33 (0x21) - Tone Generator 2 */
+   { 0x0022, 0x }, /* R34 (0x22) - Tone Generator 3 */
+   { 0x0023, 0x1000 }, /* R35 (0x23) - Tone Generator 4 */
+   { 0x0024, 0x }, /* R36 (0x24) - Tone Generator 5 */
+   { 0x0030, 0x }, /* R48 (0x30) - PWM Drive 1 */
+   { 0x0031, 0x0100 }, /* R49 (0x31) - PWM Drive 2 */
+   { 0x0032, 0x0100 }, /* R50 (0x32) - PWM Drive 3 */
+   { 0x0061, 0x01ff }, /* R97 (0x61) - Sample Rate Sequence Select 1 */
+   { 0x0062, 0x01ff }, /* R98 (0x62) - Sample Rate Sequence Select 2 */
+   { 0x0063, 0x01ff }, /* R99 (0x63) - Sample Rate Sequence Select 3 */
+   { 0x0064, 0x01ff }, /* R100 (0x64) - Sample Rate Sequence Select 4*/
+   { 0x0066, 0x01ff }, /* R102 (0x66) - Always On Triggers Sequence 
Select 1*/
+   { 0x0067, 0x01ff }, /* R103 (0x67) - Always On Triggers Sequence 
Select 2*/
+   { 0x0090, 0x }, /* R144 (0x90) - Haptics Control 1 */
+   { 0x0091, 0x7fff }, /* R145 (0x91) - Haptics Control 2 */
+   { 0x0092, 0x }, /* R146 (0x92) - Haptics phase 1 intensity */
+   { 0x0093, 0x }, /* R147 (0x93) - Haptics phase 1 duration */
+   { 0x0094, 0x }, /* R148 (0x94) - Haptics phase 2 intensity */
+   { 0x0095, 0x }, /* R149 (0x95) - Haptics phase 2 duration 

[PATCH 03/16] mfd: madera: Register map tables for Cirrus Logic CS47L35

2017-04-05 Thread Richard Fitzgerald
Regmap configuration tables for Cirrus Logic CS47L35 codecs.

Signed-off-by: Piotr Stankiewicz 
Signed-off-by: Richard Fitzgerald 
Signed-off-by: Charles Keepax 
---
 drivers/mfd/Kconfig  |6 +
 drivers/mfd/Makefile |3 +
 drivers/mfd/cs47l35-tables.c | 1688 ++
 3 files changed, 1697 insertions(+)
 create mode 100644 drivers/mfd/cs47l35-tables.c

diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index f0f9979..5aa62f4 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -226,6 +226,12 @@ config MFD_MADERA_SPI
  Support for the Cirrus Logic Madera platform audio SoC
  core functionality controlled via SPI.
 
+config MFD_CS47L35
+   bool "Cirrus Logic CS47L35"
+   depends on MFD_MADERA
+   help
+ Support for Cirrus Logic CS47L35 Smart Codec
+
 config MFD_ASIC3
bool "Compaq ASIC3"
depends on GPIOLIB && ARM
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index c41f6c9..c14a86d 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -73,6 +73,9 @@ wm8994-objs   := wm8994-core.o wm8994-irq.o 
wm8994-regmap.o
 obj-$(CONFIG_MFD_WM8994)   += wm8994.o
 
 obj-$(CONFIG_MFD_MADERA)   += madera-core.o
+ifeq ($(CONFIG_MFD_CS47L35),y)
+obj-$(CONFIG_MFD_MADERA)   += cs47l35-tables.o
+endif
 obj-$(CONFIG_MFD_MADERA_I2C)   += madera-i2c.o
 obj-$(CONFIG_MFD_MADERA_SPI)   += madera-spi.o
 
diff --git a/drivers/mfd/cs47l35-tables.c b/drivers/mfd/cs47l35-tables.c
new file mode 100644
index 000..1336c60
--- /dev/null
+++ b/drivers/mfd/cs47l35-tables.c
@@ -0,0 +1,1688 @@
+/*
+ * Regmap tables for CS47L35 codec
+ *
+ * Copyright 2015-2016 Cirrus Logic
+ *
+ * Author: Piotr Stankiewicz 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+#include "madera.h"
+
+static const struct reg_sequence cs47l35_reva_16_patch[] = {
+   { 0x460, 0x0c40 },
+   { 0x461, 0xcd1a },
+   { 0x462, 0x0c40 },
+   { 0x463, 0xb53b },
+   { 0x464, 0x0c40 },
+   { 0x465, 0x7503 },
+   { 0x466, 0x0c40 },
+   { 0x467, 0x4a41 },
+   { 0x468, 0x0041 },
+   { 0x469, 0x3491 },
+   { 0x46a, 0x0841 },
+   { 0x46b, 0x1f50 },
+   { 0x46c, 0x0446 },
+   { 0x46d, 0x14ed },
+   { 0x46e, 0x0446 },
+   { 0x46f, 0x1455 },
+   { 0x470, 0x04c6 },
+   { 0x471, 0x1220 },
+   { 0x472, 0x04c6 },
+   { 0x473, 0x040f },
+   { 0x474, 0x04ce },
+   { 0x475, 0x0339 },
+   { 0x476, 0x05df },
+   { 0x477, 0x028f },
+   { 0x478, 0x05df },
+   { 0x479, 0x0209 },
+   { 0x47a, 0x05df },
+   { 0x47b, 0x00cf },
+   { 0x47c, 0x05df },
+   { 0x47d, 0x0001 },
+   { 0x47e, 0x07ff },
+};
+
+int cs47l35_patch(struct madera *madera)
+{
+   int ret;
+
+   ret = regmap_register_patch(madera->regmap, cs47l35_reva_16_patch,
+   ARRAY_SIZE(cs47l35_reva_16_patch));
+   if (ret < 0)
+   dev_err(madera->dev, "Error applying patch: %d\n", ret);
+
+   return ret;
+}
+EXPORT_SYMBOL_GPL(cs47l35_patch);
+
+static const struct reg_default cs47l35_reg_default[] = {
+   { 0x0020, 0x }, /* R32 (0x20) - Tone Generator 1 */
+   { 0x0021, 0x1000 }, /* R33 (0x21) - Tone Generator 2 */
+   { 0x0022, 0x }, /* R34 (0x22) - Tone Generator 3 */
+   { 0x0023, 0x1000 }, /* R35 (0x23) - Tone Generator 4 */
+   { 0x0024, 0x }, /* R36 (0x24) - Tone Generator 5 */
+   { 0x0030, 0x }, /* R48 (0x30) - PWM Drive 1 */
+   { 0x0031, 0x0100 }, /* R49 (0x31) - PWM Drive 2 */
+   { 0x0032, 0x0100 }, /* R50 (0x32) - PWM Drive 3 */
+   { 0x0061, 0x01ff }, /* R97 (0x61) - Sample Rate Sequence Select 1 */
+   { 0x0062, 0x01ff }, /* R98 (0x62) - Sample Rate Sequence Select 2 */
+   { 0x0063, 0x01ff }, /* R99 (0x63) - Sample Rate Sequence Select 3 */
+   { 0x0064, 0x01ff }, /* R100 (0x64) - Sample Rate Sequence Select 4*/
+   { 0x0066, 0x01ff }, /* R102 (0x66) - Always On Triggers Sequence 
Select 1*/
+   { 0x0067, 0x01ff }, /* R103 (0x67) - Always On Triggers Sequence 
Select 2*/
+   { 0x0090, 0x }, /* R144 (0x90) - Haptics Control 1 */
+   { 0x0091, 0x7fff }, /* R145 (0x91) - Haptics Control 2 */
+   { 0x0092, 0x }, /* R146 (0x92) - Haptics phase 1 intensity */
+   { 0x0093, 0x }, /* R147 (0x93) - Haptics phase 1 duration */
+   { 0x0094, 0x }, /* R148 (0x94) - Haptics phase 2 intensity */
+   { 0x0095, 0x }, /* R149 (0x95) - Haptics phase 2 duration */
+   { 0x0096, 0x }, /* R150 (0x96) - Haptics phase 3 intensity */
+   { 0x0097, 0x }, /* R151 (0x97) - Haptics