audio: Add support for programming TFA9887.
Vinod Subbarayalu [Mon, 3 Dec 2012 02:02:29 +0000 (18:02 -0800)]
Change-Id: I82b85cea36a5cb6160ded5b65766ae82b11118ea
Signed-off-by: Vinod Subbarayalu <vsubbarayalu@nvidia.com>
(cherry picked from commit 60eb75c265f04fc3c16438bbe54802dea33cb50e)
Reviewed-on: http://git-master/r/170282
Reviewed-by: Scott Peterson <speterson@nvidia.com>

drivers/misc/tfa9887.c
include/linux/tfa9887.h

index b7a09b2..0719310 100644 (file)
@@ -40,229 +40,245 @@ static struct kobj_attribute tfa9887_vol =
 
 static struct kobject *tfa9887_kobj;
 
-static struct tfa9887_priv *tfa9887R, *tfa9887L;
+static struct tfa9887_priv *tfa9887R, *tfa9887L, *tfa9887R_byte, *tfa9887L_byte;
 
 /* begin binary data: */
 unsigned char coldpatch_data[] = {/* 10 */
-0x08,0x00,0x70,0x00,0x07,0x81,0x00,0x00,0x00,0x01
+0x08, 0x00, 0x70, 0x00, 0x07, 0x81, 0x00, 0x00, 0x00, 0x01
 };
 /* end binary data. size = 10 bytes */
 
 /* begin binary data: */
-unsigned char n1d2_data[] = {/* 2224 */
- 0x03,0x00,0x70,0x00,0x01,0xFB,0x00,0x71,0x40,0x00,0x6A,0x7E,0xFD,0x04,0x3A
-,0x91,0x00,0xC7,0x6A,0x3F,0x42,0x90,0x3A,0x92,0xFF,0xE9,0x71,0x24,0x58,0x7F
-,0x30,0x60,0x00,0x80,0x3B,0x80,0x00,0xB6,0xB8,0xA2,0xD5,0x7C,0xB5,0x00,0x54
-,0xBE,0x38,0x20,0x0A,0x6F,0xB5,0x00,0x76,0x08,0x30,0x12,0x00,0x00,0xB5,0x00
-,0x40,0x00,0xA0,0x00,0xD5,0x3C,0xB5,0x00,0x40,0x40,0x3A,0x9A,0xFF,0x50,0xB5
-,0x00,0x44,0x18,0x38,0x08,0x22,0x13,0xB5,0x00,0x42,0x90,0x3A,0x80,0x00,0x3E
-,0xD0,0x24,0x42,0x80,0xB5,0x00,0x7E,0x9C,0x82,0x14,0x7E,0x9C,0x3B,0x47,0x40
-,0x1F,0x3A,0x83,0x00,0x07,0x9B,0xC5,0x61,0x40,0x9B,0xC6,0x55,0x3D,0x3A,0x92
-,0x00,0x09,0xB5,0x00,0x42,0x10,0xD0,0x24,0x7E,0x9C,0x70,0xA0,0x7E,0x9C,0xB5
-,0x00,0x42,0x00,0x3A,0x80,0x00,0x9B,0xD0,0x24,0x54,0x7C,0x30,0x70,0x00,0x80
-,0xB5,0x00,0x61,0x40,0x3B,0x80,0x00,0xA9,0x90,0xD9,0x62,0x09,0x7F,0x4E,0x54
-,0xBC,0x6A,0x1F,0x4C,0x08,0x3B,0x80,0x01,0x0E,0x30,0x50,0x00,0x80,0xB5,0x00
-,0x58,0x3F,0x3C,0xD8,0x03,0x00,0x8B,0x80,0x7D,0x7C,0xB5,0x00,0x7E,0x9C,0x98
-,0x99,0xFD,0x06,0x9B,0x0C,0x52,0x7B,0xA6,0x18,0x58,0x7A,0x39,0x02,0x22,0x1C
-,0x30,0x90,0x00,0xD8,0x30,0xB0,0x20,0x94,0x30,0xA0,0x00,0xE4,0x20,0x03,0x40
-,0x40,0xA8,0x00,0xD4,0xFC,0xB5,0x00,0x5A,0x7D,0x62,0x08,0x66,0x0B,0x3A,0x31
-,0xFF,0xFE,0x3B,0x80,0x02,0x08,0x9B,0xC0,0xD5,0x7F,0x80,0xB0,0x54,0xBC,0x3A
-,0x89,0x00,0x04,0xFB,0x00,0x71,0x40,0x3E,0x6A,0x9F,0xD5,0xBE,0x6A,0x7E,0x44
-,0x51,0x3A,0x9B,0x00,0x05,0xB5,0x00,0x52,0xFC,0x30,0x90,0x00,0xD8,0x30,0xA0
-,0x00,0xE4,0x30,0xB0,0x20,0x94,0x20,0x03,0x40,0x50,0x6A,0x7E,0xD2,0x3D,0x80
-,0xB0,0x66,0x0B,0xB5,0x00,0x44,0x10,0x3A,0x31,0xFF,0xFE,0x3B,0x80,0x02,0x08
-,0x9B,0xC0,0xD5,0x7F,0x6A,0xDF,0x54,0xBD,0x3A,0x89,0x00,0x04,0x62,0x28,0xD5
-,0x3F,0x3A,0x9B,0x00,0x05,0xB5,0x00,0x54,0xFD,0x9B,0xAC,0x52,0x3C,0xA6,0x12
-,0xD2,0x3B,0x39,0x02,0x22,0x1C,0xA6,0x52,0xD8,0x3A,0xA8,0x00,0xFE,0x9C,0x3C
-,0xD8,0x03,0x00,0xA9,0x01,0x7D,0x7A,0xB5,0x00,0x61,0x34,0x71,0x44,0x7D,0x03
-,0x6A,0x7E,0xC4,0x08,0xB5,0x00,0x58,0x7F,0x30,0x50,0x00,0x80,0x3B,0x80,0x01
-,0x25,0xB5,0x00,0x55,0x7E,0x6A,0xDE,0xD5,0x3E,0x62,0x4C,0xC4,0x11,0x38,0x20
-,0x0A,0x6F,0x6A,0xFE,0xE1,0x50,0xB5,0x00,0x55,0x7E,0x30,0x40,0x00,0x80,0x3B
-,0x80,0x01,0x00,0xB0,0xB2,0xF6,0x00,0x6A,0x1F,0x54,0xBD,0x3B,0x80,0x01,0x00
-,0x9B,0xA6,0xFE,0x9C,0xB5,0x00,0x58,0x3F,0x3C,0xD8,0x03,0x00,0x8B,0x80,0x7D
-,0x7D,0xB5,0x00,0x7E,0x9C,0x38,0x08,0x0A,0x6F,0x9B,0xA6,0x7D,0x04,0xB0,0xB6
-,0x62,0x88,0x69,0x7E,0xC4,0x08,0x6A,0xBF,0x54,0xFC,0xB5,0x00,0x58,0x7F,0x3B
-,0x80,0x01,0x25,0x30,0x50,0x00,0x80,0x69,0x5E,0xD5,0x3C,0x72,0x02,0xC4,0x11
-,0x6A,0x1F,0x76,0x40,0x30,0x40,0x00,0x80,0x3B,0x80,0x01,0x00,0xB0,0xB2,0xD5
-,0x7C,0xFB,0x00,0x71,0x40,0x7C,0x9B,0xA6,0xD4,0x3E,0xB5,0x00,0x54,0xBC,0x3B
-,0x80,0x01,0x00,0x3A,0x80,0x00,0x80,0xB5,0x00,0x58,0x3F,0x3C,0xD8,0x03,0x00
-,0x8B,0x80,0x7D,0x7C,0xB5,0x00,0x7E,0x9C,0x9B,0x86,0x7D,0x04,0x38,0x0A,0x0A
-,0x6F,0xB0,0xB2,0xD4,0x7E,0x6A,0x7E,0x52,0xFD,0x71,0x04,0xD8,0x7F,0x3B,0x80
-,0x01,0x25,0x30,0x50,0x00,0x80,0x69,0x5E,0xD5,0x3E,0x72,0x02,0xC4,0x11,0x6A
-,0xBE,0xD4,0xBC,0x30,0x40,0x00,0x80,0x3B,0x80,0x01,0x00,0xB0,0xB2,0xF6,0x00
-,0xB5,0x00,0x54,0x3C,0x3A,0x88,0x00,0x80,0xB5,0x00,0x54,0x3D,0x3B,0x80,0x01
-,0x00,0x9B,0xA6,0xFE,0x9C,0xB5,0x00,0x58,0x3F,0x3C,0xD8,0x03,0x00,0x8B,0x80
-,0x7D,0x7C,0xB5,0x00,0x7E,0x9C,0x3A,0x88,0x00,0x0A,0x9B,0x8C,0x42,0x88,0xA6
-,0x56,0x7D,0x05,0x39,0x02,0x22,0x20,0xAA,0x08,0xC4,0x00,0x3A,0x89,0x00,0xA6
-,0xBA,0x41,0x58,0x7B,0x6E,0x3F,0x54,0x7C,0x3B,0x80,0x13,0x20,0xBA,0x20,0xDA
-,0x7D,0x6D,0x5E,0xD0,0xBE,0x3A,0x81,0x00,0x18,0x82,0x04,0x7E,0x40,0x3A,0x90
-,0xFF,0xFA,0xBF,0x10,0x4C,0x90,0xBB,0x00,0x55,0x7D,0x31,0x80,0x20,0xAF,0x3B
-,0x80,0x01,0x07,0x9B,0xA2,0xCA,0x48,0x7F,0x4E,0x54,0xBD,0xB5,0x00,0x4C,0x88
-,0x3A,0x91,0xFF,0x43,0xB5,0x00,0x42,0x90,0x96,0xF4,0xD5,0xBC,0x3A,0x81,0xFF
-,0x41,0x3A,0x93,0x00,0x29,0x61,0x48,0xFD,0xA9,0x3A,0x88,0x00,0xAF,0x61,0x8A
-,0x72,0xE8,0x6A,0x7E,0xC4,0x00,0x30,0x40,0x00,0x80,0x30,0x70,0x02,0xBC,0xFB
-,0x00,0x71,0x40,0xBA,0x3B,0x80,0x1C,0x5A,0xB5,0x00,0x55,0x7C,0xB5,0x00,0x54
-,0x3D,0x3A,0x88,0x00,0x0F,0x62,0x24,0x44,0x0A,0x3A,0x91,0xFF,0x4F,0x30,0x50
-,0x00,0x80,0x3B,0x80,0x01,0x25,0xB5,0x00,0x55,0x7D,0x6A,0xDE,0x54,0xBD,0x3A
-,0x81,0xFF,0xF3,0x72,0x22,0xC2,0x84,0x30,0xA0,0x0A,0x70,0x61,0x04,0x42,0x98
-,0x7F,0x2C,0x76,0x91,0x38,0x00,0x22,0x08,0x61,0x88,0x40,0x48,0x69,0x3F,0x54
-,0x7D,0xB5,0x00,0x52,0xFF,0x3B,0x80,0x1B,0x5B,0x38,0x0D,0x0A,0x6F,0x30,0x00
-,0x00,0x20,0xB9,0x00,0x54,0x3D,0x9B,0x2B,0x55,0x3C,0xB0,0x04,0x52,0xBE,0x38
-,0x08,0x22,0x01,0xA6,0xD0,0x52,0x3F,0x3A,0x80,0x00,0x0F,0x8B,0x80,0x42,0x50
-,0x9B,0xA2,0x42,0xC0,0x3A,0x88,0x00,0xB4,0xB5,0x00,0x53,0x7C,0x31,0x1F,0xFF
-,0xE9,0x69,0x3F,0x44,0x0D,0x3B,0x80,0x01,0x25,0xB5,0x00,0x54,0xFD,0x7F,0x4E
-,0x54,0x3D,0xB5,0x00,0x44,0x00,0x3B,0x80,0x01,0x25,0x9B,0xA7,0x7E,0x9C,0x7D
-,0x8C,0x54,0x3D,0x7C,0x24,0xC4,0x85,0x6A,0x3E,0xD2,0xBC,0x61,0x64,0x44,0x00
-,0x3B,0x80,0x02,0xE4,0x30,0x50,0x00,0x80,0x9B,0xA2,0x52,0x3E,0x90,0x90,0xD4
-,0xBD,0xA2,0x12,0xFB,0x24,0xB5,0x00,0x4C,0x8D,0x3B,0x44,0x40,0xDA,0x31,0x10
-,0x00,0x1C,0xB5,0x00,0x4C,0xCD,0xB5,0x00,0x58,0x3B,0x3C,0xD8,0x03,0x00,0x8B
-,0x80,0x7D,0x7B,0xB5,0x00,0x7E,0x9C,0x6C,0x3F,0xFD,0x02,0x3B,0x80,0x10,0xA5
-,0xB5,0x00,0x54,0x7E,0xB5,0x00,0x54,0x3E,0x3A,0x98,0x00,0x5C,0xFB,0x00,0x71
-,0x40,0xF8,0x30,0x40,0x00,0x82,0x7F,0x2C,0xC2,0x59,0x3A,0xAB,0xFF,0xDE,0x7F
-,0x2C,0x78,0x6B,0x39,0x00,0x22,0x20,0x64,0x24,0x4A,0x49,0x3A,0x91,0xFF,0xFA
-,0x7F,0x30,0x79,0x14,0x3A,0x84,0x00,0x1A,0x3A,0xB0,0xFF,0xC4,0x30,0x45,0x00
-,0x00,0x61,0x20,0x78,0xF5,0x30,0x11,0x00,0x00,0x38,0x04,0x22,0x01,0x38,0x10
-,0x26,0x91,0x60,0xA8,0x40,0xE8,0x7F,0x2C,0x42,0x70,0x3B,0x80,0x40,0x59,0x3A
-,0x8B,0xFF,0xF2,0xB5,0x00,0x58,0x3F,0x3C,0xD8,0x03,0x00,0x8B,0x80,0x7D,0x7E
-,0xB5,0x00,0x7E,0x9C,0x3C,0xD0,0x00,0x8E,0x3C,0xCB,0xFF,0xB4,0x82,0x14,0x52
-,0xF6,0x6C,0x3C,0xD4,0x78,0xB5,0x00,0x55,0xFA,0x3B,0x46,0x41,0x1C,0x95,0xD4
-,0xF9,0x1A,0xB5,0x00,0x53,0x77,0xB5,0x00,0x52,0xB6,0x3C,0xC5,0x41,0x1B,0x6A
-,0x5C,0x62,0x0C,0x61,0x84,0xFE,0x9C,0x7F,0x20,0xC3,0x41,0x3C,0xC9,0xFF,0x72
-,0x30,0xA0,0x02,0x17,0x9B,0xA0,0xE2,0x0B,0x9B,0xC0,0xD6,0x7B,0x9B,0x00,0xD4
-,0xFC,0x8B,0x80,0x55,0x7D,0x30,0xB0,0x21,0x2C,0x73,0x05,0xD3,0xB7,0xB5,0x00
-,0x52,0x7F,0x3B,0x80,0x01,0xDA,0x3A,0x31,0xFF,0xFE,0x6A,0x1E,0x54,0xBA,0x7C
-,0x01,0x78,0x4A,0x6A,0x7E,0x52,0xB7,0x3B,0x80,0x01,0x00,0xB5,0x00,0x54,0x7A
-,0x9B,0xC0,0xD2,0xBF,0x90,0x94,0xD5,0x3D,0x3A,0x92,0x00,0x04,0x92,0x11,0xD5
-,0xBE,0x6A,0x1E,0x54,0xBA,0x3A,0x9B,0x00,0x05,0x7C,0x27,0x78,0x06,0xB5,0x00
-,0x55,0x7D,0x3B,0x44,0x41,0x23,0x80,0x18,0x54,0x7A,0xFB,0x00,0x71,0x41,0x36
-,0x80,0xB8,0x54,0xFC,0xB5,0x00,0x52,0xB6,0x82,0x14,0x7E,0x9C,0x3B,0x46,0x41
-,0x42,0x6A,0x5D,0xD4,0x38,0x3C,0xC5,0x41,0x3F,0xB5,0x00,0x43,0x0B,0x94,0x18
-,0xFE,0x9C,0xB5,0x00,0x43,0x0B,0x94,0x18,0xC0,0x41,0x3B,0x00,0x41,0x43,0xB5
-,0x00,0x58,0x39,0xB5,0x00,0x58,0x39,0x3C,0xD8,0x03,0x00,0x8B,0x80,0x7E,0x9C
-,0x3C,0xD0,0xFF,0x72,0x71,0x65,0x7D,0x2B,0x6A,0x7B,0xC2,0x91,0x6A,0xBC,0x62
-,0x4B,0x6A,0x3D,0xD2,0xF9,0xB5,0x00,0x58,0x7C,0x3B,0x80,0x16,0x94,0xB5,0x00
-,0x54,0xFA,0x7C,0x44,0xD4,0xB9,0x6A,0x1C,0x42,0x91,0x61,0xC0,0x7E,0x9C,0x6A
-,0xBE,0xD4,0xB7,0x3B,0x80,0x00,0xA9,0x9B,0xC3,0x62,0x09,0x6A,0xDC,0x54,0x3D
-,0x3A,0x90,0x00,0x10,0x61,0xCC,0x42,0x80,0x6A,0xBE,0xD4,0xBB,0x3B,0x80,0x00
-,0xA9,0x9B,0xC3,0x62,0x09,0x9B,0xA0,0xD4,0x38,0x3A,0x88,0x00,0x96,0x66,0x04
-,0x45,0x0A,0x79,0x40,0xC3,0x80,0x3A,0x89,0xFF,0x6B,0x80,0x18,0x54,0x3B,0xB5
-,0x00,0x54,0xFE,0x3B,0x80,0x02,0x8F,0x80,0xD4,0x74,0x57,0x7F,0x4E,0x54,0xBE
-,0xB5,0x00,0x42,0x88,0x3A,0x81,0x00,0x5B,0x6A,0x3F,0xD4,0xBB,0x3B,0x80,0x01
-,0x00,0x3C,0xC8,0xFF,0xD7,0x7F,0x4E,0x54,0xBF,0xB5,0x00,0x42,0x88,0x82,0x14
-,0x54,0x3A,0x3A,0x80,0x00,0x5C,0x3B,0x43,0x41,0x7C,0x6A,0x3C,0x55,0x38,0x3A
-,0x8A,0x00,0x95,0x31,0x1F,0xFF,0x6A,0x9B,0xA0,0xCC,0x0D,0x6A,0x7F,0xC3,0x90
-,0x6A,0x1B,0xF2,0x81,0xB5,0x00,0x74,0x57,0xFB,0x00,0x71,0x41,0x74,0x30,0xA0
-,0x0E,0xBA,0x3B,0x80,0x02,0x8F,0x80,0x18,0x61,0x85,0x6A,0x5D,0xD5,0x3F,0x3B
-,0x80,0x1A,0x0A,0x3C,0xC8,0xFF,0xD7,0x3B,0x00,0x41,0x7D,0xB5,0x00,0x54,0xBD
-,0xB5,0x00,0x54,0xBD,0x61,0x44,0x7E,0x9C,0x98,0xB5,0x54,0xBE,0xB5,0x00,0x7E
-,0x9C,0x82,0x14,0x43,0x08,0x3B,0x63,0x41,0x86,0xB5,0x00,0x54,0x37,0x3B,0x80
-,0x01,0x00,0x80,0xB8,0x74,0x57,0x3B,0x20,0x41,0x8F,0x6A,0x1D,0x54,0xB9,0x3A
-,0x89,0x00,0x22,0x3A,0x80,0x00,0x14,0x61,0xC4,0x42,0x80,0xD0,0x6C,0x74,0x57
-,0x30,0xA0,0x07,0xA1,0x94,0x03,0xD4,0x37,0x3B,0x80,0x00,0x14,0xB5,0x00,0x61
-,0x40,0x9B,0xA0,0xD4,0xBE,0x3A,0x81,0x00,0x97,0x61,0xC4,0x45,0x04,0x31,0x0F
-,0xFF,0x6A,0x6A,0x3C,0xCC,0x05,0x6A,0x5B,0xF2,0x81,0xB5,0x00,0x74,0x17,0x3B
-,0x80,0x02,0x8F,0x80,0x18,0x61,0x85,0x6A,0x5D,0xD5,0x39,0xB5,0x00,0x54,0x37
-,0x3B,0x80,0x17,0x99,0xB5,0x00,0x7E,0x9C,0x92,0x13,0xD4,0xB8,0x3B,0x62,0x41
-,0xB4,0x8B,0x80,0x42,0x88,0x90,0xB7,0xF8,0x0B,0xB2,0xD2,0xC2,0x80,0x92,0x17
-,0xC3,0x48,0x3B,0x42,0x41,0xB2,0xB5,0x00,0x54,0x3A,0x3A,0x90,0x00,0x5D,0xB5
-,0x00,0x43,0x10,0x82,0x18,0x7E,0x9C,0x3B,0x66,0x41,0xB2,0x3A,0x88,0x00,0x5E
-,0xB5,0x00,0x43,0x08,0x90,0xD8,0xFE,0x9C,0xA2,0x1A,0xC3,0x48,0x3B,0x66,0x41
-,0xB0,0x6C,0x1E,0x7E,0x4A,0x3B,0x00,0x41,0xB5,0xB5,0x00,0x7E,0x48,0x3B,0x00
-,0x41,0xB5,0xB5,0x00,0x58,0x3C,0x4B,0x00,0x71,0x41,0xB2,0x3B,0x00,0x41,0xB5
-,0xB5,0x00,0x58,0x3C,0x9B,0x9F,0xD8,0x3C,0x3C,0xD8,0x03,0x00,0x7F,0x4E,0x7D
-,0x55,0x39,0x84,0x80,0x02,0x39,0x86,0x80,0x02,0x30,0x40,0x01,0x00,0xA8,0x1E
-,0x7E,0x9C,0xA2,0x02,0x7E,0x9C,0x3B,0x43,0x41,0xC1,0x30,0x10,0x01,0xFF,0xA8
-,0x38,0xFE,0x9C,0x30,0x4F,0xFE,0x00,0xA9,0x26,0x7E,0x9C,0x3C,0xD8,0x03,0x00
-,0x9B,0x99,0x7E,0x9C,0xA0,0x86,0x7E,0x9C,0x93,0x00,0x71,0x41,0xDB,0x72,0x28
-,0x7B,0x01,0x32,0x00,0x40,0xA0,0x32,0x40,0x40,0xC0,0x32,0x80,0x41,0x00,0x7D
-,0xC1,0xFC,0x04,0x3B,0x00,0x41,0xF8,0x8B,0x20,0x68,0x60,0x38,0x14,0x00,0xD2
-,0x38,0x12,0x00,0xD5,0x38,0x10,0x00,0xD4,0x82,0x10,0x7E,0x9C,0x3B,0x45,0x41
-,0xF0,0x38,0x30,0x00,0xCF,0xB5,0x00,0x62,0xD8,0x60,0x09,0xE3,0x0A,0x60,0x24
-,0x78,0xDB,0x71,0xA5,0x40,0x1A,0x60,0x00,0x40,0x52,0x60,0x0C,0x40,0x50,0x3B
-,0x00,0x41,0xF2,0xB5,0x00,0x40,0x68,0x7F,0x29,0xE3,0x0A,0x7F,0x28,0x7E,0x48
-,0x90,0x24,0x81,0xA3,0x60,0x07,0xCC,0xA7,0x38,0x11,0x00,0xD4,0x38,0x31,0x00
-,0xCF,0x38,0x19,0x00,0xD2,0x38,0x13,0x00,0xD5,0x38,0x00,0x00,0xEF,0xA2,0x04
-,0x7E,0x9C,0x3B,0x64,0x41,0xE2,0x38,0x10,0x00,0xD4,0x38,0x20,0x00,0xA2,0x3C
-,0xD8,0x03,0x00,0xB5,0x00,0x42,0x07,0x03,0x00,0x70,0x00,0x03,0x21,0x00,0x71
-,0x0A,0x6F,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00
-,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0x06,0x00,0x00,0x06,0x00
-,0x00,0x06,0x03,0x00,0x70,0x00,0x05,0x03,0x00,0x70,0x00,0x07,0x7B,0x00,0x71
-,0x03,0x00,0x00,0x00,0x01,0x00,0x1B,0xA7,0x00,0x40,0x00,0x00,0x3B,0x80,0x00
-,0x00,0x01,0x00,0x03,0xE7,0x00,0x40,0x2E,0x00,0x3B,0x80,0x00,0x00,0x01,0x00
-,0x0B,0x0D,0x00,0x40,0x59,0x00,0x3B,0x80,0x00,0x00,0x01,0x00,0x0B,0x23,0x00
-,0x40,0x6E,0x00,0x3B,0x80,0x00,0x00,0x01,0x00,0x0B,0xAB,0x00,0x40,0x84,0x00
-,0x3B,0x80,0x00,0x00,0x01,0x00,0x0D,0xF5,0x00,0x40,0x9A,0x00,0x3B,0x80,0x00
-,0x00,0x01,0x00,0x0D,0x24,0x00,0x41,0x46,0x00,0x3B,0x80,0x00,0x00,0x01,0x00
-,0x0A,0x6B,0x00,0x40,0xF3,0x00,0x3B,0x80,0x00,0x00,0x01,0x00,0x05,0xC6,0x00
-,0x41,0x0F,0x00,0x3B,0x80,0x00,0x00,0x01,0x00,0x05,0x7B,0x00,0x41,0xB7,0x00
-,0x3B,0x80,0x03,0x00,0x70,0x00,0x00,0x23,0x00,0x70,0x00,0x02,0x00,0x01,0x00
-,0x80,0x03,0x00,0x00,0x19,0x00,0x00,0x17,0x00,0x00,0x16,0x00,0x00,0x1D,0x00
-,0x00,0x1B,0x00,0x00,0x1B,0x00,0x00,0x1E,0x00,0x00,0x1C,0x00,0x00,0x1C,0x03
-,0x00,0x70,0x01,0x12
-};
-/* end binary data. size = 2224 bytes */
 
-/* begin binary data: */
-unsigned char speaker_data[] = { /* 423 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-,0xFF,0xFC,0x03,0xFF,0xF8,0x41,0xFF,0xFD,0x44,0xFF,0xFD,0x9A,0x00,0x04,0xCA
-,0xFF,0xFB,0xD7,0x00,0x02,0x1A,0x00,0x01,0x28,0xFF,0xFF,0xBE,0xFF,0xF7,0x7D
-,0xFF,0xFD,0x0C,0xFF,0xF9,0x11,0x00,0x02,0x4A,0x00,0x00,0xF4,0xFF,0xF6,0x91
-,0x00,0x03,0x83,0x00,0x05,0xA7,0xFF,0xFA,0x1E,0xFF,0xFE,0x25,0xFF,0xF9,0xC4
-,0xFF,0xF8,0x65,0xFF,0xFE,0x43,0xFF,0xFC,0x41,0xFF,0xFD,0xDD,0xFF,0xFD,0xCD
-,0x00,0x03,0x15,0x00,0x01,0x9E,0xFF,0xF7,0x79,0xFF,0xF7,0x8B,0xFF,0xFF,0x1F
-,0xFF,0xFA,0x1A,0xFF,0xFB,0x89,0xFF,0xF8,0x78,0x00,0x02,0x91,0xFF,0xFF,0xBB
-,0xFF,0xFB,0x13,0x00,0x03,0x01,0x00,0x01,0x84,0xFF,0xF8,0x5D,0xFF,0xF1,0x38
-,0xFF,0xFE,0xEA,0xFF,0xF7,0x12,0x00,0x02,0xED,0xFF,0xFB,0x8D,0x00,0x00,0xF5
-,0x00,0x02,0x62,0xFF,0xF7,0xE0,0xFF,0xFA,0x0D,0xFF,0xFE,0x76,0xFF,0xFD,0xFC
-,0xFF,0xF8,0x46,0xFF,0xF5,0x6C,0xFF,0xFB,0xCA,0x00,0x00,0x8E,0xFF,0xF7,0xF0
-,0xFF,0xFB,0xD4,0xFF,0xFC,0x6C,0x00,0x00,0x0D,0x00,0x06,0xE1,0x00,0x02,0x5D
-,0xFF,0xF6,0x23,0xFF,0xF9,0x7E,0xFF,0xF7,0x51,0xFF,0xF1,0xE1,0xFF,0xF9,0xD8
-,0xFF,0xEE,0xC5,0xFF,0xFB,0x11,0x00,0x0A,0xC3,0x00,0x18,0x1C,0x00,0x24,0x81
-,0x00,0x1B,0x9C,0x00,0x01,0xF7,0xFF,0xF1,0xF7,0xFF,0xCF,0x95,0xFF,0xBD,0x0D
-,0xFF,0xB3,0x57,0xFF,0xDE,0xD5,0xFF,0xFD,0xCB,0x00,0x35,0x80,0x00,0x67,0x11
-,0x00,0x7C,0x80,0x00,0x63,0x57,0x00,0x32,0x02,0xFF,0xBF,0x6F,0xFF,0xA6,0xD4
-,0x07,0x23,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4F,0x70,0x1D
-,0x66,0x66,0x66,0x26,0x66,0x66,0x26,0x66,0x66,0x24,0xCC,0xCD,0x1E,0x66,0x67
-,0x00,0x02,0xE7,0x00,0x02,0xE7,0x04,0x00,0x00,0x00,0x45,0x1F,0x19,0x00,0x00
-,0x03,0x7B,0x4A
+char n1d2_data[] = { /* 2200 */
+
+0x03, 0x00, 0x70, 0x00, 0x01, 0xFB, 0x00, 0x71, 0x40
+, 0x00, 0x6A, 0x7E, 0xFD, 0x04, 0x3A, 0x91, 0x00, 0xC7, 0x6A, 0x3F, 0x42, 0x90, 0x3A, 0x92
+, 0xFF, 0xE9, 0x71, 0x24, 0x58, 0x7F, 0x30, 0x60, 0x00, 0x80, 0x3B, 0x80, 0x00, 0xB6, 0xB8
+, 0xA2, 0xD5, 0x7C, 0xB5, 0x00, 0x54, 0xBE, 0x38, 0x20, 0x0A, 0x6F, 0xB5, 0x00, 0x76, 0x08
+, 0x30, 0x12, 0x00, 0x00, 0xB5, 0x00, 0x40, 0x00, 0xA0, 0x00, 0xD5, 0x3C, 0xB5, 0x00, 0x40
+, 0x40, 0x3A, 0x9A, 0xFF, 0x50, 0xB5, 0x00, 0x44, 0x18, 0x38, 0x08, 0x22, 0x13, 0xB5, 0x00
+, 0x42, 0x90, 0x3A, 0x80, 0x00, 0x3E, 0xD0, 0x24, 0x42, 0x80, 0xB5, 0x00, 0x7E, 0x9C, 0x82
+, 0x14, 0x7E, 0x9C, 0x3B, 0x47, 0x40, 0x1F, 0x3A, 0x83, 0x00, 0x07, 0x9B, 0xC5, 0x61, 0x40
+, 0x9B, 0xC6, 0x55, 0x3D, 0x3A, 0x92, 0x00, 0x09, 0xB5, 0x00, 0x42, 0x10, 0xD0, 0x24, 0x7E
+, 0x9C, 0x70, 0xA0, 0x7E, 0x9C, 0xB5, 0x00, 0x42, 0x00, 0x3A, 0x80, 0x00, 0x9B, 0xD0, 0x24
+, 0x54, 0x7C, 0x30, 0x70, 0x00, 0x80, 0xB5, 0x00, 0x61, 0x40, 0x3B, 0x80, 0x00, 0xA9, 0x90
+, 0xD9, 0x62, 0x09, 0x7F, 0x4E, 0x54, 0xBC, 0x6A, 0x1F, 0x4C, 0x08, 0x3B, 0x80, 0x01, 0x0E
+, 0x30, 0x50, 0x00, 0x80, 0xB5, 0x00, 0x58, 0x3F, 0x3C, 0xD8, 0x03, 0x00, 0x8B, 0x80, 0x7D
+, 0x7C, 0xB5, 0x00, 0x7E, 0x9C, 0x98, 0x99, 0xFD, 0x06, 0x9B, 0x0C, 0x52, 0x7B, 0xA6, 0x18
+, 0x58, 0x7A, 0x39, 0x02, 0x22, 0x1C, 0x30, 0x90, 0x00, 0xD8, 0x30, 0xB0, 0x20, 0x94, 0x30
+, 0xA0, 0x00, 0xE4, 0x20, 0x03, 0x40, 0x40, 0xA8, 0x00, 0xD4, 0xFC, 0xB5, 0x00, 0x5A, 0x7D
+, 0x62, 0x08, 0x66, 0x0B, 0x3A, 0x31, 0xFF, 0xFE, 0x3B, 0x80, 0x02, 0x08, 0x9B, 0xC0, 0xD5
+, 0x7F, 0x80, 0xB0, 0x54, 0xBC, 0x3A, 0x89, 0x00, 0x04, 0xFB, 0x00, 0x71, 0x40, 0x3E, 0x6A
+, 0x9F, 0xD5, 0xBE, 0x6A, 0x7E, 0x44, 0x51, 0x3A, 0x9B, 0x00, 0x05, 0xB5, 0x00, 0x52, 0xFC
+, 0x30, 0x90, 0x00, 0xD8, 0x30, 0xA0, 0x00, 0xE4, 0x30, 0xB0, 0x20, 0x94, 0x20, 0x03, 0x40
+, 0x50, 0x6A, 0x7E, 0xD2, 0x3D, 0x80, 0xB0, 0x66, 0x0B, 0xB5, 0x00, 0x44, 0x10, 0x3A, 0x31
+, 0xFF, 0xFE, 0x3B, 0x80, 0x02, 0x08, 0x9B, 0xC0, 0xD5, 0x7F, 0x6A, 0xDF, 0x54, 0xBD, 0x3A
+, 0x89, 0x00, 0x04, 0x62, 0x28, 0xD5, 0x3F, 0x3A, 0x9B, 0x00, 0x05, 0xB5, 0x00, 0x54, 0xFD
+, 0x9B, 0xAC, 0x52, 0x3C, 0xA6, 0x12, 0xD2, 0x3B, 0x39, 0x02, 0x22, 0x1C, 0xA6, 0x52, 0xD8
+, 0x3A, 0xA8, 0x00, 0xFE, 0x9C, 0x3C, 0xD8, 0x03, 0x00, 0xA9, 0x01, 0x7D, 0x7A, 0xB5, 0x00
+, 0x61, 0x34, 0x71, 0x44, 0x7D, 0x03, 0x6A, 0x7E, 0xC4, 0x08, 0xB5, 0x00, 0x58, 0x7F, 0x30
+, 0x50, 0x00, 0x80, 0x3B, 0x80, 0x01, 0x25, 0xB5, 0x00, 0x55, 0x7E, 0x6A, 0xDE, 0xD5, 0x3E
+, 0x62, 0x4C, 0xC4, 0x11, 0x38, 0x20, 0x0A, 0x6F, 0x6A, 0xFE, 0xE1, 0x50, 0xB5, 0x00, 0x55
+, 0x7E, 0x30, 0x40, 0x00, 0x80, 0x3B, 0x80, 0x01, 0x00, 0xB0, 0xB2, 0xF6, 0x00, 0x6A, 0x1F
+, 0x54, 0xBD, 0x3B, 0x80, 0x01, 0x00, 0x9B, 0xA6, 0xFE, 0x9C, 0xB5, 0x00, 0x58, 0x3F, 0x3C
+, 0xD8, 0x03, 0x00, 0x8B, 0x80, 0x7D, 0x7D, 0xB5, 0x00, 0x7E, 0x9C, 0x38, 0x08, 0x0A, 0x6F
+, 0x9B, 0xA6, 0x7D, 0x04, 0xB0, 0xB6, 0x62, 0x88, 0x69, 0x7E, 0xC4, 0x08, 0x6A, 0xBF, 0x54
+, 0xFC, 0xB5, 0x00, 0x58, 0x7F, 0x3B, 0x80, 0x01, 0x25, 0x30, 0x50, 0x00, 0x80, 0x69, 0x5E
+, 0xD5, 0x3C, 0x72, 0x02, 0xC4, 0x11, 0x6A, 0x1F, 0x76, 0x40, 0x30, 0x40, 0x00, 0x80, 0x3B
+, 0x80, 0x01, 0x00, 0xB0, 0xB2, 0xD5, 0x7C, 0xFB, 0x00, 0x71, 0x40, 0x7C, 0x9B, 0xA6, 0xD4
+, 0x3E, 0xB5, 0x00, 0x54, 0xBC, 0x3B, 0x80, 0x01, 0x00, 0x3A, 0x80, 0x00, 0x80, 0xB5, 0x00
+, 0x58, 0x3F, 0x3C, 0xD8, 0x03, 0x00, 0x8B, 0x80, 0x7D, 0x7C, 0xB5, 0x00, 0x7E, 0x9C, 0x9B
+, 0x86, 0x7D, 0x04, 0x38, 0x0A, 0x0A, 0x6F, 0xB0, 0xB2, 0xD4, 0x7E, 0x6A, 0x7E, 0x52, 0xFD
+, 0x71, 0x04, 0xD8, 0x7F, 0x3B, 0x80, 0x01, 0x25, 0x30, 0x50, 0x00, 0x80, 0x69, 0x5E, 0xD5
+, 0x3E, 0x72, 0x02, 0xC4, 0x11, 0x6A, 0xBE, 0xD4, 0xBC, 0x30, 0x40, 0x00, 0x80, 0x3B, 0x80
+, 0x01, 0x00, 0xB0, 0xB2, 0xF6, 0x00, 0xB5, 0x00, 0x54, 0x3C, 0x3A, 0x88, 0x00, 0x80, 0xB5
+, 0x00, 0x54, 0x3D, 0x3B, 0x80, 0x01, 0x00, 0x9B, 0xA6, 0xFE, 0x9C, 0xB5, 0x00, 0x58, 0x3F
+, 0x3C, 0xD8, 0x03, 0x00, 0x8B, 0x80, 0x7D, 0x7C, 0xB5, 0x00, 0x7E, 0x9C, 0x3A, 0x88, 0x00
+, 0x0A, 0x9B, 0x8C, 0x42, 0x88, 0xA6, 0x56, 0x7D, 0x05, 0x39, 0x02, 0x22, 0x20, 0xAA, 0x08
+, 0xC4, 0x00, 0x3A, 0x89, 0x00, 0xA6, 0xBA, 0x41, 0x58, 0x7B, 0x6E, 0x3F, 0x54, 0x7C, 0x3B
+, 0x80, 0x13, 0x20, 0xBA, 0x20, 0xDA, 0x7D, 0x6D, 0x5E, 0xD0, 0xBE, 0x3A, 0x81, 0x00, 0x18
+, 0x82, 0x04, 0x7E, 0x40, 0x3A, 0x90, 0xFF, 0xFA, 0xBF, 0x10, 0x4C, 0x90, 0xBB, 0x00, 0x55
+, 0x7D, 0x31, 0x80, 0x20, 0xAF, 0x3B, 0x80, 0x01, 0x07, 0x9B, 0xA2, 0xCA, 0x48, 0x7F, 0x4E
+, 0x54, 0xBD, 0xB5, 0x00, 0x4C, 0x88, 0x3A, 0x91, 0xFF, 0x43, 0xB5, 0x00, 0x42, 0x90, 0x96
+, 0xF4, 0xD5, 0xBC, 0x3A, 0x81, 0xFF, 0x41, 0x3A, 0x93, 0x00, 0x29, 0x61, 0x48, 0xFD, 0xA9
+, 0x3A, 0x88, 0x00, 0xAF, 0x61, 0x8A, 0x72, 0xE8, 0x6A, 0x7E, 0xC4, 0x00, 0x30, 0x40, 0x00
+, 0x80, 0x30, 0x70, 0x02, 0xBC, 0xFB, 0x00, 0x71, 0x40, 0xBA, 0x3B, 0x80, 0x1C, 0x5A, 0xB5
+, 0x00, 0x55, 0x7C, 0xB5, 0x00, 0x54, 0x3D, 0x3A, 0x88, 0x00, 0x0F, 0x62, 0x24, 0x44, 0x0A
+, 0x3A, 0x91, 0xFF, 0x4F, 0x30, 0x50, 0x00, 0x80, 0x3B, 0x80, 0x01, 0x25, 0xB5, 0x00, 0x55
+, 0x7D, 0x6A, 0xDE, 0x54, 0xBD, 0x3A, 0x81, 0xFF, 0xF3, 0x72, 0x22, 0xC2, 0x84, 0x30, 0xA0
+, 0x0A, 0x70, 0x61, 0x04, 0x42, 0x98, 0x7F, 0x2C, 0x76, 0x91, 0x38, 0x00, 0x22, 0x08, 0x61
+, 0x88, 0x40, 0x48, 0x69, 0x3F, 0x54, 0x7D, 0xB5, 0x00, 0x52, 0xFF, 0x3B, 0x80, 0x1B, 0x5B
+, 0x38, 0x0D, 0x0A, 0x6F, 0x30, 0x00, 0x00, 0x20, 0xB9, 0x00, 0x54, 0x3D, 0x9B, 0x2B, 0x55
+, 0x3C, 0xB0, 0x04, 0x52, 0xBE, 0x38, 0x08, 0x22, 0x01, 0xA6, 0xD0, 0x52, 0x3F, 0x3A, 0x80
+, 0x00, 0x0F, 0x8B, 0x80, 0x42, 0x50, 0x9B, 0xA2, 0x42, 0xC0, 0x3A, 0x88, 0x00, 0xB4, 0xB5
+, 0x00, 0x53, 0x7C, 0x31, 0x1F, 0xFF, 0xE9, 0x69, 0x3F, 0x44, 0x0D, 0x3B, 0x80, 0x01, 0x25
+, 0xB5, 0x00, 0x54, 0xFD, 0x7F, 0x4E, 0x54, 0x3D, 0xB5, 0x00, 0x44, 0x00, 0x3B, 0x80, 0x01
+, 0x25, 0x9B, 0xA7, 0x7E, 0x9C, 0x7D, 0x8C, 0x54, 0x3D, 0x7C, 0x24, 0xC4, 0x85, 0x6A, 0x3E
+, 0xD2, 0xBC, 0x61, 0x64, 0x44, 0x00, 0x3B, 0x80, 0x02, 0xE4, 0x30, 0x50, 0x00, 0x80, 0x9B
+, 0xA2, 0x52, 0x3E, 0x90, 0x90, 0xD4, 0xBD, 0xA2, 0x12, 0xFB, 0x24, 0xB5, 0x00, 0x4C, 0x8D
+, 0x3B, 0x44, 0x40, 0xDA, 0x31, 0x10, 0x00, 0x1C, 0xB5, 0x00, 0x4C, 0xCD, 0xB5, 0x00, 0x58
+, 0x3B, 0x3C, 0xD8, 0x03, 0x00, 0x8B, 0x80, 0x7D, 0x7B, 0xB5, 0x00, 0x7E, 0x9C, 0x6C, 0x3F
+, 0xFD, 0x02, 0x3B, 0x80, 0x10, 0xA5, 0xB5, 0x00, 0x54, 0x7E, 0xB5, 0x00, 0x54, 0x3E, 0x3A
+, 0x98, 0x00, 0x5C, 0xFB, 0x00, 0x71, 0x40, 0xF8, 0x30, 0x40, 0x00, 0x82, 0x7F, 0x2C, 0xC2
+, 0x59, 0x3A, 0xAB, 0xFF, 0xDE, 0x7F, 0x2C, 0x78, 0x6B, 0x39, 0x00, 0x22, 0x20, 0x64, 0x24
+, 0x4A, 0x49, 0x3A, 0x91, 0xFF, 0xFA, 0x7F, 0x30, 0x79, 0x14, 0x3A, 0x84, 0x00, 0x1A, 0x3A
+, 0xB0, 0xFF, 0xC4, 0x30, 0x45, 0x00, 0x00, 0x61, 0x20, 0x78, 0xF5, 0x30, 0x11, 0x00, 0x00
+, 0x38, 0x04, 0x22, 0x01, 0x38, 0x10, 0x26, 0x91, 0x60, 0xA8, 0x40, 0xE8, 0x7F, 0x2C, 0x42
+, 0x70, 0x3B, 0x80, 0x40, 0x59, 0x3A, 0x8B, 0xFF, 0xF2, 0xB5, 0x00, 0x58, 0x3F, 0x3C, 0xD8
+, 0x03, 0x00, 0x8B, 0x80, 0x7D, 0x7E, 0xB5, 0x00, 0x7E, 0x9C, 0x3C, 0xD0, 0x00, 0x8E, 0x3C
+, 0xCB, 0xFF, 0xB4, 0x82, 0x14, 0x52, 0xF6, 0x6C, 0x3C, 0xD4, 0x78, 0xB5, 0x00, 0x55, 0xFA
+, 0x3B, 0x46, 0x41, 0x1C, 0x95, 0xD4, 0xF9, 0x1A, 0xB5, 0x00, 0x53, 0x77, 0xB5, 0x00, 0x52
+, 0xB6, 0x3C, 0xC5, 0x41, 0x1B, 0x6A, 0x5C, 0x62, 0x0C, 0x61, 0x84, 0xFE, 0x9C, 0x7F, 0x20
+, 0xC3, 0x41, 0x3C, 0xC9, 0xFF, 0x72, 0x30, 0xA0, 0x02, 0x17, 0x9B, 0xA0, 0xE2, 0x0B, 0x9B
+, 0xC0, 0xD6, 0x7B, 0x9B, 0x00, 0xD4, 0xFC, 0x8B, 0x80, 0x55, 0x7D, 0x30, 0xB0, 0x21, 0x2C
+, 0x73, 0x05, 0xD3, 0xB7, 0xB5, 0x00, 0x52, 0x7F, 0x3B, 0x80, 0x01, 0xDA, 0x3A, 0x31, 0xFF
+, 0xFE, 0x6A, 0x1E, 0x54, 0xBA, 0x7C, 0x01, 0x78, 0x4A, 0x6A, 0x7E, 0x52, 0xB7, 0x3B, 0x80
+, 0x01, 0x00, 0xB5, 0x00, 0x54, 0x7A, 0x9B, 0xC0, 0xD2, 0xBF, 0x90, 0x94, 0xD5, 0x3D, 0x3A
+, 0x92, 0x00, 0x04, 0x92, 0x11, 0xD5, 0xBE, 0x6A, 0x1E, 0x54, 0xBA, 0x3A, 0x9B, 0x00, 0x05
+, 0x7C, 0x27, 0x78, 0x06, 0xB5, 0x00, 0x55, 0x7D, 0x3B, 0x44, 0x41, 0x23, 0x80, 0x18, 0x54
+, 0x7A, 0xFB, 0x00, 0x71, 0x41, 0x36, 0x80, 0xB8, 0x54, 0xFC, 0xB5, 0x00, 0x52, 0xB6, 0x82
+, 0x14, 0x7E, 0x9C, 0x3B, 0x46, 0x41, 0x42, 0x6A, 0x5D, 0xD4, 0x38, 0x3C, 0xC5, 0x41, 0x3F
+, 0xB5, 0x00, 0x43, 0x0B, 0x94, 0x18, 0xFE, 0x9C, 0xB5, 0x00, 0x43, 0x0B, 0x94, 0x18, 0xC0
+, 0x41, 0x3B, 0x00, 0x41, 0x43, 0xB5, 0x00, 0x58, 0x39, 0xB5, 0x00, 0x58, 0x39, 0x3C, 0xD8
+, 0x03, 0x00, 0x8B, 0x80, 0x7E, 0x9C, 0x3C, 0xD0, 0xFF, 0x72, 0x6A, 0x7B, 0xFD, 0x2B, 0x30
+, 0x60, 0x0D, 0x5B, 0x39, 0x85, 0x03, 0x09, 0x6A, 0xBC, 0x62, 0x4A, 0x69, 0x7D, 0x42, 0x91
+, 0x30, 0x60, 0x41, 0xC4, 0x39, 0x85, 0x03, 0x0A, 0x6C, 0x3E, 0x54, 0x7B, 0x3B, 0x80, 0x16
+, 0x94, 0xB5, 0x00, 0x55, 0x79, 0x7C, 0x44, 0xD4, 0xBA, 0x6A, 0x1C, 0xC2, 0x91, 0x61, 0xC0
+, 0x7E, 0x9C, 0x6A, 0xBE, 0xD4, 0xB7, 0x3B, 0x80, 0x00, 0xA9, 0x9B, 0xC3, 0x62, 0x09, 0x6A
+, 0xDC, 0xD4, 0x3D, 0x3A, 0x90, 0x00, 0x10, 0x61, 0xCC, 0x42, 0x80, 0x6A, 0xBE, 0xD4, 0xBB
+, 0x3B, 0x80, 0x00, 0xA9, 0x9B, 0xC3, 0x62, 0x09, 0x9B, 0xA0, 0xD4, 0x39, 0x3A, 0x88, 0x00
+, 0x96, 0x66, 0x04, 0x45, 0x0A, 0x79, 0x40, 0xC3, 0x80, 0x3A, 0x89, 0xFF, 0x6B, 0x80, 0x18
+, 0x54, 0x3B, 0xB5, 0x00, 0x54, 0xFE, 0x3B, 0x80, 0x02, 0x8F, 0x80, 0xD4, 0x74, 0x57, 0x7F
+, 0x4E, 0x54, 0xBE, 0xB5, 0x00, 0x42, 0x88, 0x3A, 0x81, 0x00, 0x5B, 0x6A, 0x3F, 0xD4, 0xBB
+, 0x3B, 0x80, 0x01, 0x00, 0x3C, 0xC8, 0xFF, 0xD7, 0x7F, 0x4E, 0x54, 0xBF, 0xB5, 0x00, 0x42
+, 0x88, 0x82, 0x14, 0x54, 0x38, 0x3A, 0x80, 0x00, 0x5C, 0x3B, 0x43, 0x41, 0x7F, 0x6A, 0x3C
+, 0xD5, 0x39, 0x3A, 0x8A, 0x00, 0x95, 0x31, 0x1F, 0xFF, 0x6A, 0x9B, 0xA0, 0xCC, 0x0D, 0xFB
+, 0x00, 0x71, 0x41, 0x74, 0x6A, 0x7F, 0xC3, 0x90, 0x6A, 0x1B, 0xF2, 0x81, 0xB5, 0x00, 0x74
+, 0x57, 0x30, 0xA0, 0x0E, 0xBA, 0x3B, 0x80, 0x02, 0x8F, 0x80, 0x18, 0x61, 0x85, 0x6A, 0x5D
+, 0xD5, 0x3F, 0x3B, 0x80, 0x1A, 0x0A, 0x3C, 0xC8, 0xFF, 0xD7, 0x3B, 0x00, 0x41, 0x80, 0xB5
+, 0x00, 0x54, 0xBD, 0xB5, 0x00, 0x54, 0xBD, 0x61, 0x44, 0x7E, 0x9C, 0x98, 0xB5, 0x54, 0xBE
+, 0xB5, 0x00, 0x7E, 0x9C, 0x82, 0x14, 0x43, 0x08, 0x3B, 0x63, 0x41, 0x89, 0xB5, 0x00, 0x54
+, 0x37, 0x3B, 0x80, 0x01, 0x00, 0x80, 0xB8, 0x74, 0x57, 0x3B, 0x20, 0x41, 0x92, 0x6A, 0x1C
+, 0x54, 0xBA, 0x3A, 0x89, 0x00, 0x22, 0x3A, 0x80, 0x00, 0x14, 0x61, 0xC4, 0x42, 0x80, 0xD0
+, 0x6C, 0x74, 0x57, 0x30, 0xA0, 0x07, 0xA1, 0x94, 0x03, 0xD4, 0x37, 0x3B, 0x80, 0x00, 0x14
+, 0xB5, 0x00, 0x61, 0x40, 0x9B, 0xA0, 0xD4, 0xBE, 0x3A, 0x81, 0x00, 0x97, 0x61, 0xC4, 0x45
+, 0x04, 0x31, 0x0F, 0xFF, 0x6A, 0x6A, 0x3D, 0x4C, 0x05, 0x6A, 0x5B, 0xF2, 0x81, 0xB5, 0x00
+, 0x74, 0x17, 0x3B, 0x80, 0x02, 0x8F, 0x80, 0x18, 0x61, 0x85, 0x6A, 0x5D, 0xD5, 0x3A, 0xB5
+, 0x00, 0x54, 0x37, 0x3B, 0x80, 0x17, 0x99, 0xB5, 0x00, 0x7E, 0x9C, 0x92, 0x13, 0xD4, 0xB9
+, 0x3B, 0x62, 0x41, 0xB7, 0x8B, 0x80, 0x42, 0x88, 0x90, 0xB7, 0xF8, 0x0B, 0xB2, 0xD2, 0xC2
+, 0x80, 0x92, 0x17, 0xC3, 0x48, 0x3B, 0x42, 0x41, 0xB5, 0xB5, 0x00, 0x54, 0x38, 0x3A, 0x90
+, 0x00, 0x5D, 0xB5, 0x00, 0x43, 0x10, 0x82, 0x18, 0x7E, 0x9C, 0x3B, 0x66, 0x41, 0xB5, 0x3A
+, 0x88, 0x00, 0x5E, 0xB5, 0x00, 0x43, 0x08, 0x90, 0xD8, 0xFE, 0x9C, 0xA2, 0x1A, 0xC3, 0x48
+, 0x3B, 0x66, 0x41, 0xB3, 0x6C, 0x1E, 0x7E, 0x4A, 0x3B, 0x00, 0x41, 0xB8, 0x23, 0x00, 0x71
+, 0x41, 0xB2, 0xB5, 0x00, 0x7E, 0x48, 0x3B, 0x00, 0x41, 0xB8, 0xB5, 0x00, 0x58, 0x3C, 0x3B
+, 0x00, 0x41, 0xB8, 0xB5, 0x00, 0x58, 0x3C, 0x9B, 0x9F, 0xD8, 0x3C, 0x3C, 0xD8, 0x03, 0x00
+, 0x7F, 0x4E, 0x7D, 0x55, 0xA3, 0x00, 0x71, 0x41, 0xC4, 0x6A, 0x7F, 0x7D, 0x22, 0x71, 0x44
+, 0xD8, 0x7F, 0x3B, 0x80, 0x13, 0xF7, 0x9B, 0xA1, 0x74, 0x5E, 0x7A, 0x2F, 0x54, 0x3E, 0x3A
+, 0x80, 0x00, 0x2F, 0x6A, 0x3F, 0x42, 0x80, 0x3B, 0x80, 0x00, 0x82, 0xB5, 0x00, 0x62, 0x09
+, 0x7F, 0x4E, 0x54, 0x3E, 0xB5, 0x00, 0x42, 0x80, 0x3A, 0x88, 0x00, 0x56, 0xB5, 0x00, 0x54
+, 0xFE, 0x3B, 0x80, 0x00, 0x51, 0x3C, 0xC8, 0xFF, 0xDE, 0x6A, 0x1F, 0x58, 0x3F, 0xB5, 0x00
+, 0x7D, 0x5E, 0x3C, 0xD8, 0x03, 0x00, 0x8B, 0xA0, 0x42, 0x42, 0x80, 0x94, 0x7E, 0x40, 0x6C
+, 0x3F, 0xFD, 0x01, 0x3B, 0x80, 0x03, 0x64, 0x38, 0x0A, 0x00, 0xEF, 0xB5, 0x00, 0x58, 0x3F
+, 0x3C, 0xD8, 0x03, 0x00, 0x8B, 0x80, 0x7D, 0x7F, 0xB5, 0x00, 0x7E, 0x9C, 0x39, 0x84, 0x80
+, 0x02, 0x39, 0x86, 0x80, 0x02, 0x30, 0x40, 0x01, 0x00, 0xA8, 0x1E, 0x7E, 0x9C, 0xA2, 0x02
+, 0x7E, 0x9C, 0x3B, 0x43, 0x41, 0xE9, 0x30, 0x10, 0x01, 0xFF, 0xA8, 0x38, 0xFE, 0x9C, 0x30
+, 0x4F, 0xFE, 0x00, 0xA9, 0x26, 0x7E, 0x9C, 0x3C, 0xD8, 0x03, 0x00, 0x9B, 0x99, 0x7E, 0x9C
+, 0xA0, 0x86, 0x7E, 0x9C, 0x03, 0x00, 0x70, 0x00, 0x03, 0x21, 0x00, 0x71, 0x0A, 0x6F, 0x00
+, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00
+, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x03
+, 0x00, 0x70, 0x00, 0x05, 0x03, 0x00, 0x70, 0x00, 0x07, 0x7B, 0x00, 0x71, 0x03, 0x00, 0x00
+, 0x00, 0x01, 0x00, 0x1B, 0xA7, 0x00, 0x40, 0x00, 0x00, 0x3B, 0x80, 0x00, 0x00, 0x01, 0x00
+, 0x03, 0xE7, 0x00, 0x40, 0x2E, 0x00, 0x3B, 0x80, 0x00, 0x00, 0x01, 0x00, 0x05, 0x7B, 0x00
+, 0x41, 0xDF, 0x00, 0x3B, 0x80, 0x00, 0x00, 0x01, 0x00, 0x0B, 0x23, 0x00, 0x40, 0x6E, 0x00
+, 0x3B, 0x80, 0x00, 0x00, 0x01, 0x00, 0x0B, 0xAB, 0x00, 0x40, 0x84, 0x00, 0x3B, 0x80, 0x00
+, 0x00, 0x01, 0x00, 0x0D, 0xF5, 0x00, 0x40, 0x9A, 0x00, 0x3B, 0x80, 0x00, 0x00, 0x01, 0x00
+, 0x0D, 0x24, 0x00, 0x41, 0x46, 0x00, 0x3B, 0x80, 0x00, 0x00, 0x01, 0x00, 0x0A, 0x6B, 0x00
+, 0x40, 0xF3, 0x00, 0x3B, 0x80, 0x00, 0x00, 0x01, 0x00, 0x07, 0x6C, 0x00, 0x41, 0xD8, 0x00
+, 0x3B, 0x80, 0x00, 0x00, 0x01, 0x00, 0x05, 0xC6, 0x00, 0x41, 0x0F, 0x00, 0x3B, 0x80, 0x03
+, 0x00, 0x70, 0x00, 0x00, 0x23, 0x00, 0x70, 0x00, 0x02, 0x00, 0x01, 0x00, 0x80, 0x03, 0xFF
+, 0xFF, 0xF9, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xF6, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x1B, 0x00
+, 0x00, 0x1B, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x03, 0x00, 0x70, 0x01
+, 0x12
 };
-/* end binary data. size = 423 bytes */
+
+/* end binary data. size = 2200 bytes */
+
 
 /* begin binary data: */
 unsigned char preset_data[] = { /* 87 */
- 0x00,0x00,0x00,0x00,0x00,0xFA,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x1F,0x40
-,0x00,0x00,0x00,0x00,0x01,0x2C,0x01,0x47,0xAE,0x00,0x2B,0xB0,0x00,0x00,0x00
-,0x00,0x20,0xC5,0x00,0x80,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x08,0x00,0x00
-,0x08,0x00,0x00,0x05,0x00,0x00,0x00,0x80,0x00,0x00,0x0C,0xCD,0x00,0x80,0x00
-,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21
-,0x08,0x00,0x00,0x08,0x00,0x00,0x00,0x0C,0xCD,0x00,0x00,0x03
+0x00, 0x00, 0x07, 0x00, 0x01, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x40
+, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2C, 0x01, 0x47, 0xAE, 0x00, 0x2B, 0xB1, 0x00, 0x00, 0x9D
+, 0x00, 0x0D, 0x1B, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x08, 0x00, 0x00
+, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0C, 0xCD, 0x00, 0x40, 0x00
+, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x48, 0x00, 0x01, 0x48
+, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0C, 0xCD, 0x00, 0x00, 0x03
 };
 /* end binary data. size = 87 bytes */
 
 /* begin binary data: */
 unsigned char config_data[] = { /* 165 */
- 0x09,0xF3,0x33,0x01,0x3E,0x66,0x00,0x51,0xEC,0x00,0x00,0x14,0x00,0x00,0x02
-,0x1A,0xDB,0xA7,0x1B,0x36,0x15,0x1C,0x4E,0xAD,0x00,0x00,0x00,0x00,0x00,0x01
-,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x21
-,0x00,0x00,0x00,0x00,0x00,0xFA,0x00,0x00,0x01,0x00,0x00,0x02,0x00,0x00,0x01
-,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x80,0x00,0x01,0x40,0x00,0x00,0x03,0x47
-,0x01,0x47,0xAE,0x00,0x19,0x9A,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x80,0x00
-,0x00,0x00,0x01,0x05,0x00,0x00,0x00,0x80,0x00,0x00,0x0F,0xFF,0x07,0xC2,0x8F
-,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x80,0x00,0x00,0x01
-,0x00,0x00,0x01,0x01,0x47,0xAE,0x00,0x00,0x40,0x00,0x00,0x00,0x19,0x99,0x9A
-,0x00,0x80,0x00,0x00,0x00,0x02,0x00,0x00,0x10,0x00,0x00,0x02,0x00,0x00,0x30
-,0xEC,0x00,0x00,0x00,0x03,0xD7,0x01,0x00,0x00,0x08,0x00,0x00,0x01,0x00,0x00
+0x09, 0xF3, 0x33, 0x01, 0x3E, 0x66, 0x00, 0x54, 0xCD, 0x00, 0x00, 0x14, 0x00, 0x00, 0x02
+, 0x1A, 0xE6, 0x40, 0x1B, 0x40, 0xD4, 0x1C, 0x59, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
+, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4B, 0x00, 0x01, 0x4B
+, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01
+, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x47
+, 0x01, 0x47, 0xAE, 0x00, 0x19, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00
+, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0F, 0xFF, 0x07, 0xC2, 0x8F
+, 0x00, 0x03, 0xE8, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01
+, 0x00, 0x00, 0x01, 0x01, 0x47, 0xAE, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x19, 0x99, 0x9A
+, 0x00, 0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x30, 0x00, 0x00, 0x02, 0x00, 0x00, 0x30
+, 0xEC, 0x00, 0x00, 0x00, 0x03, 0xD7, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00
 };
 /* end binary data. size = 165 bytes */
 
+unsigned char speaker_data[] = { /*423*/
+0x00, 0x03, 0x42, 0x00, 0x02, 0x0F, 0x00, 0x03, 0xB1, 0x00, 0x03, 0x9E, 0x00, 0x03, 0x13
+, 0x00, 0x02, 0xDE, 0x00, 0x02, 0xC8, 0x00, 0x03, 0x2B, 0x00, 0x02, 0x72, 0xFF, 0xFF, 0x98
+, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0x92, 0xFF, 0xFD, 0xDB, 0xFF, 0xFE, 0xCE
+, 0xFF, 0xFD, 0x65, 0xFF, 0xFC, 0xFB, 0xFF, 0xFD, 0x42, 0xFF, 0xFE, 0x2F, 0xFF, 0xFE, 0x35
+, 0xFF, 0xFC, 0xB7, 0xFF, 0xF9, 0xB8, 0xFF, 0xFB, 0x78, 0xFF, 0xFA, 0xC3, 0xFF, 0xFB, 0x22
+, 0xFF, 0xF8, 0x91, 0xFF, 0xFA, 0xC3, 0xFF, 0xF9, 0xF6, 0xFF, 0xF9, 0xF1, 0xFF, 0xF9, 0x5B
+, 0xFF, 0xFC, 0xA4, 0xFF, 0xFB, 0xC8, 0xFF, 0xFD, 0x26, 0xFF, 0xFB, 0xEA, 0xFF, 0xFE, 0x8A
+, 0xFF, 0xFE, 0x4C, 0xFF, 0xFF, 0x37, 0xFF, 0xFF, 0x28, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xCA
+, 0x00, 0x00, 0x51, 0x00, 0x00, 0x9D, 0x00, 0x04, 0x7D, 0x00, 0x03, 0x0D, 0x00, 0x02, 0x76
+, 0x00, 0x01, 0xAF, 0x00, 0x03, 0x51, 0x00, 0x02, 0xB2, 0x00, 0x01, 0x64, 0x00, 0x00, 0x9D
+, 0x00, 0x01, 0x8A, 0x00, 0x00, 0xB1, 0xFF, 0xFF, 0x1C, 0xFF, 0xFD, 0x65, 0xFF, 0xFE, 0x56
+, 0xFF, 0xFD, 0x62, 0xFF, 0xFA, 0x83, 0xFF, 0xF9, 0x97, 0xFF, 0xFA, 0x0B, 0xFF, 0xF8, 0x0C
+, 0xFF, 0xF7, 0xA7, 0xFF, 0xF7, 0xBE, 0xFF, 0xF7, 0x6B, 0xFF, 0xF6, 0xFC, 0xFF, 0xF6, 0x89
+, 0xFF, 0xF7, 0x08, 0xFF, 0xF8, 0x47, 0xFF, 0xF7, 0x57, 0xFF, 0xF5, 0x1F, 0xFF, 0xF5, 0xA8
+, 0xFF, 0xF7, 0x58, 0xFF, 0xF7, 0x1E, 0xFF, 0xF5, 0x16, 0xFF, 0xF8, 0x62, 0xFF, 0xF9, 0xAF
+, 0xFF, 0xFB, 0x21, 0xFF, 0xFA, 0xFC, 0xFF, 0xFF, 0xC6, 0x00, 0x01, 0xFC, 0x00, 0x04, 0x3F
+, 0x00, 0x06, 0x73, 0x00, 0x09, 0x90, 0x00, 0x0D, 0xC8, 0x00, 0x0D, 0x3D, 0x00, 0x11, 0x06
+, 0x00, 0x0D, 0xD4, 0x00, 0x11, 0xF3, 0x00, 0x0B, 0x5B, 0x00, 0x0E, 0x83, 0x00, 0x06, 0xCF
+, 0x00, 0x0D, 0x4B, 0x00, 0x01, 0x58, 0x00, 0x02, 0x01, 0xFF, 0xF7, 0xE8, 0xFF, 0xFF, 0x41
+, 0xFF, 0xF1, 0x00, 0xFF, 0xF9, 0xDD, 0xFF, 0xEE, 0xB3, 0xFF, 0xF7, 0x58, 0xFF, 0xE5, 0xCC
+, 0xFF, 0xFB, 0x88, 0xFF, 0xEC, 0xD3, 0x00, 0x0D, 0x59, 0x00, 0x00, 0x7B, 0x00, 0x2F, 0xAA
+, 0x00, 0x21, 0x53, 0x00, 0x5F, 0x23, 0x00, 0x3C, 0xC3, 0x00, 0x7B, 0xBD, 0x00, 0x32, 0xD1
+, 0x00, 0x62, 0xF7, 0xFF, 0xDA, 0x6D, 0xFF, 0xF9, 0x15, 0xFF, 0x07, 0x73, 0xFF, 0xBD, 0x20
+, 0x07, 0x73, 0xC2, 0xFF, 0xD8, 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x33, 0x33
+, 0x79, 0x99, 0x9A, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0xF5, 0xC3
+, 0x00, 0x01, 0xB2, 0x00, 0x01, 0x7C, 0x04, 0x00, 0x00, 0x00, 0x4C, 0xCD, 0x1C, 0xC0, 0x00
+, 0x00, 0x6F, 0x69
+};
+
+unsigned char eq_data[] = { /*180*/
+0x00, 0x00, 0x01, 0xC2, 0x59, 0x70, 0x7D, 0x9B, 0x88, 0x3E, 0xD0, 0x84, 0x82, 0x5E, 0xF0
+, 0x3E, 0xD0, 0x84, 0x00, 0x00, 0x01, 0xC2, 0x59, 0x70, 0x7D, 0x9B, 0x88, 0x3E, 0xD0, 0x84
+, 0x82, 0x5E, 0xF0, 0x3E, 0xD0, 0x84, 0x00, 0x00, 0x01, 0xCA, 0xD0, 0xCC, 0x74, 0x2E, 0x8C
+, 0x34, 0x44, 0xB4, 0x8C, 0x06, 0x64, 0x41, 0x1F, 0x70, 0x00, 0x00, 0x01, 0xC4, 0x03, 0xE4
+, 0x7B, 0xDA, 0xCC, 0x3B, 0x9E, 0xA8, 0x84, 0x2C, 0x10, 0x40, 0x64, 0x50, 0x00, 0x00, 0x01
+, 0xF0, 0x9D, 0x28, 0x27, 0xB1, 0x6C, 0x17, 0x15, 0xDC, 0xBF, 0xBE, 0xA0, 0x50, 0xDC, 0xF4
+, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
+, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01
+, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00
+
+};
 
 void convertBytes2Data(int num_bytes, const unsigned char bytes[], int data[])
 {
@@ -280,7 +296,7 @@ void convertBytes2Data(int num_bytes, const unsigned char bytes[], int data[])
         }
 }
 
-int ProcessPatchFile(struct tfa9887_priv *tfa9887, int length, const unsigned char* bytes)
+int ProcessPatchFile(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte, int length, const unsigned char* bytes)
 {
        unsigned int size;
        int index = 0;
@@ -288,7 +304,7 @@ int ProcessPatchFile(struct tfa9887_priv *tfa9887, int length, const unsigned ch
        int error;
         int value = 0;
         unsigned int status;
-
+       int j = 0;
        error = Tfa9887_ReadRegister(tfa9887, TFA9887_STATUS, &status);
        if (error == Tfa9887_Error_Ok) {
                if ( (status & 0x0043) != 0x0043) {
@@ -297,7 +313,7 @@ int ProcessPatchFile(struct tfa9887_priv *tfa9887, int length, const unsigned ch
                }
        }
        pr_info("tfa status %u\n",status);
-       error = DspReadMem(tfa9887, 0x2210, 1, &value);
+       error = DspReadMem(tfa9887, tfa9887_byte, 0x2210, 1, &value);
        pr_info("tfa Version  %x\n",value);
        while (index < length) {
                /* extract little endian length */
@@ -308,8 +324,9 @@ int ProcessPatchFile(struct tfa9887_priv *tfa9887, int length, const unsigned ch
                        return -1;
                }
                memcpy(buffer, bytes + index, size);
-               error = regmap_raw_write(tfa9887->regmap, buffer[0], &buffer[1] ,(size -1) * 2);
+               error = regmap_raw_write(tfa9887_byte->regmap, buffer[0], &buffer[1] , (size -1));
                if (error != Tfa9887_Error_Ok) {
+                       pr_info("ProcessPatchFile error\n");
                        break;
                }
                index += size;
@@ -317,7 +334,7 @@ int ProcessPatchFile(struct tfa9887_priv *tfa9887, int length, const unsigned ch
        return error;
 }
 
-int DspReadMem(struct tfa9887_priv *tfa9887, unsigned short start_offset, int num_words, int *pValues)
+int DspReadMem(struct tfa9887_priv *tfa9887,  struct tfa9887_priv *tfa9887_byte, unsigned short start_offset, int num_words, int *pValues)
 {
        unsigned int cf_ctrl; /* the value to sent to the CF_CONTROLS register */
        unsigned char bytes[MAX_I2C_LENGTH];
@@ -341,7 +358,6 @@ int DspReadMem(struct tfa9887_priv *tfa9887, unsigned short start_offset, int nu
        if (error != Tfa9887_Error_Ok) {
                return error;
        }
-       
        num_bytes = num_words*bytes_per_word;
        p=pValues;
        for (; num_bytes > 0; ) {
@@ -350,7 +366,7 @@ int DspReadMem(struct tfa9887_priv *tfa9887, unsigned short start_offset, int nu
                        burst_size = num_bytes;
                }
 
-               error = regmap_raw_read(tfa9887->regmap, TFA9887_CF_MEM, bytes,burst_size * 2);
+               error = regmap_raw_read(tfa9887_byte->regmap, TFA9887_CF_MEM, bytes,burst_size);
                if (error != Tfa9887_Error_Ok) {
                        return error;
                }
@@ -361,44 +377,16 @@ int DspReadMem(struct tfa9887_priv *tfa9887, unsigned short start_offset, int nu
        return Tfa9887_Error_Ok;
 }
 
-int DspWriteMem(struct tfa9887_priv *tfa9887, unsigned int address, int value)
-{
-       unsigned int cf_ctrl; /* the value to sent to the CF_CONTROLS register */
-       unsigned int bytes[3];
-       int error;
-       /* first set DMEM and AIF, leaving other bits intact */
-       error = Tfa9887_ReadRegister(tfa9887, TFA9887_CF_CONTROLS, &cf_ctrl);
-       if (error != Tfa9887_Error_Ok) {
-               return error;
-       }
-       cf_ctrl &= ~0x000E; /* clear AIF & DMEM */
-       cf_ctrl |= (Tfa9887_DMEM_XMEM<<1); /* set DMEM, leave AIF cleared for autoincrement */
-       error = Tfa9887_WriteRegister(tfa9887, TFA9887_CF_CONTROLS, cf_ctrl);
-       if (error != Tfa9887_Error_Ok) {
-               return error;
-       }
-       error = Tfa9887_WriteRegister(tfa9887, TFA9887_CF_MAD, address);
-       if (error != Tfa9887_Error_Ok) {
-               return error;
-       }
-       //convertData2Bytes(1, &value, bytes);
-       error = regmap_raw_write(tfa9887->regmap, TFA9887_CF_MEM,bytes, 3 * 2);
-       if (error != Tfa9887_Error_Ok) {
-               return error;
-       }
-       return Tfa9887_Error_Ok;
-
-}
-
-int DspSetParam(struct tfa9887_priv *tfa9887,unsigned char module_id, unsigned char param_id, int num_bytes, const unsigned char *data)
+int DspSetParam(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte, unsigned char module_id, unsigned char param_id, int num_bytes, const unsigned char *data)
 {
 
        int error;
        unsigned int cf_ctrl = 0x0002; /* the value to be sent to the CF_CONTROLS register: cf_req=00000000, cf_int=0, cf_aif=0, cf_dmem=XMEM=01, cf_rst_dsp=0 */
        unsigned int cf_mad = 0x0001; /* memory address to be accessed (0 : Status, 1 : ID, 2 : parameters) */
-        unsigned int cf_status; /* the contents of the CF_STATUS register */
-       unsigned int id[3];
+       unsigned int cf_status; /* the contents of the CF_STATUS register */
+       unsigned char id[3];
        int tries = 0;
+       int j = 0;
        error = Tfa9887_WriteRegister(tfa9887, TFA9887_CF_CONTROLS, cf_ctrl);
        if (error == Tfa9887_Error_Ok) {
                error = Tfa9887_WriteRegister(tfa9887, TFA9887_CF_MAD, cf_mad);
@@ -407,83 +395,31 @@ int DspSetParam(struct tfa9887_priv *tfa9887,unsigned char module_id, unsigned c
                id[0] = 0;
                id[1] = module_id+128;
                id[2] = param_id;
-               error = regmap_raw_write(tfa9887->regmap, TFA9887_CF_MEM,id, 3*2);
+               error = regmap_raw_write(tfa9887_byte->regmap, TFA9887_CF_MEM,&id, 3);
        }
-       if (error == Tfa9887_Error_Ok) {
-               error = regmap_raw_write(tfa9887->regmap, TFA9887_CF_MEM, data, num_bytes*2);
-       }
-
-       cf_ctrl |= (1<<8) | (1<<4); /* set the cf_req1 and cf_int bit */
-       error = Tfa9887_WriteRegister(tfa9887, TFA9887_CF_CONTROLS, cf_ctrl);
-       pr_info("Writing TFA9887_CF_MEM %d \n",error);
 
-       do {
-               error = Tfa9887_ReadRegister(tfa9887, TFA9887_CF_STATUS, &cf_status);
-               tries++;
-       } while ( (error==Tfa9887_Error_Ok) && ((cf_status & 0x0100) == 0) && (tries < 10) ); /* don't wait forever, DSP is pretty quick to respond (< 1ms) */
-
-       if (tries >= 10) {
-               /* something wrong with communication with DSP */
-               pr_info("Setparam something wrong\n");
-               error = -1;
-       }
-       return error;
-}
-
-int DspGetParam(struct tfa9887_priv *tfa9887, unsigned char module_id, unsigned char param_id, int num_bytes, const unsigned char *data)
-{
-
-       unsigned int cf_ctrl = 0x0002; /* the value to be sent to the CF_CONTROLS register: cf_req=00000000, cf_int=0, cf_aif=0, cf_dmem=XMEM=01, cf_rst_dsp=0 */
-       unsigned int cf_mad = 0x0001; /* memory address to be accessed (0 : Status, 1 : ID, 2 : parameters) */
-       unsigned int cf_status; /* the contents of the CF_STATUS register */
-       int error;
-        int tries = 0;
-        unsigned int id[3];
-
-       error = Tfa9887_WriteRegister(tfa9887, TFA9887_CF_CONTROLS, cf_ctrl);
-
-       if (error == Tfa9887_Error_Ok) {
-               error = Tfa9887_WriteRegister(tfa9887, TFA9887_CF_MAD, cf_mad);
-       }
+               error = regmap_raw_write(tfa9887_byte->regmap, TFA9887_CF_MEM, data, num_bytes);
 
        if (error == Tfa9887_Error_Ok) {
-               id[0] = 0;
-               id[1] = module_id+128;
-               id[2] = param_id;
-               /* only try MEM once, if error, need to resend mad as well */
-               error = regmap_raw_write(tfa9887->regmap, TFA9887_CF_MEM, id, 3*2);
-       }
-       /* 2) wake up the DSP and let it process the data */
-       if (error == Tfa9887_Error_Ok) {
                cf_ctrl |= (1<<8) | (1<<4); /* set the cf_req1 and cf_int bit */
-               error = Tfa9887_WriteRegister(tfa9887, TFA9887_CF_CONTROLS, cf_ctrl);
-       }
+               error = Tfa9887_WriteRegister(tfa9887, TFA9887_CF_CONTROLS, cf_ctrl);
+               pr_info("Writing TFA9887_CF_MEM %d \n",error);
 
-       /* 3) wait for the ack */
-       if (error == Tfa9887_Error_Ok) {
                do {
                        error = Tfa9887_ReadRegister(tfa9887, TFA9887_CF_STATUS, &cf_status);
-                       tries++;
+                       tries++;
                } while ( (error==Tfa9887_Error_Ok) && ((cf_status & 0x0100) == 0) && (tries < 10) ); /* don't wait forever, DSP is pretty quick to respond (< 1ms) */
 
                if (tries >= 10) {
-                       /* something wrong with communication with DSP */
-                       pr_info("Something wrong with DSP\n");
-                       return -1;
+                       /* something wrong with communication with DSP */
+                       pr_info("Setparam something wrong\n");
+                       error = -1;
                }
        }
-       /* 5) read the resulting data */
-       if (error == Tfa9887_Error_Ok) {
-               cf_mad = 0x0002; /* memory address to be accessed (0 : Status, 1 : ID, 2 : parameters) */
-               error = Tfa9887_WriteRegister(tfa9887, TFA9887_CF_MAD, cf_mad);
-       }
-
-       if (error == Tfa9887_Error_Ok) {
-               error = regmap_raw_read(tfa9887->regmap, TFA9887_CF_MEM,data,num_bytes*2);
-       }
        return error;
 }
 
+
 int Tfa9887_WriteRegister(struct tfa9887_priv *tfa9887, unsigned int subaddress, unsigned int value)
 {
         int error = regmap_write(tfa9887->regmap,subaddress,value);
@@ -499,20 +435,20 @@ int Tfa9887_ReadRegister(struct tfa9887_priv *tfa9887, unsigned int subaddress,
 int Tfa9887_Init(void)
 {
        int error = 0;
-       if(tfa9887R->deviceInit)
-               error = Init(tfa9887R);
-       if(tfa9887L->deviceInit)
-               error = Init(tfa9887L);
-        if (error != 0)
+       if((tfa9887R) && (tfa9887R->deviceInit))
+               error = Init(tfa9887R,tfa9887R_byte);
+       if((tfa9887L) && (tfa9887L->deviceInit))
+               error = Init(tfa9887L,tfa9887L_byte);
+       if (error != 0)
                pr_info("Failed to Init tfa\n");
        return error;
 }
 
-int coldStarup(struct tfa9887_priv *tfa9887)
+int coldStartup(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte)
 {
        int error,volume_value;
-        unsigned int value;
-
+       unsigned int value;
+       int tries = 0;
         error = Tfa9887_WriteRegister(tfa9887, 0x09, 0x0002);
         if (Tfa9887_Error_Ok == error) {
                 error = Tfa9887_ReadRegister(tfa9887, 0x09, &value);
@@ -535,7 +471,7 @@ int coldStarup(struct tfa9887_priv *tfa9887)
         }
         if (Tfa9887_Error_Ok == error) {
                 error = Tfa9887_WriteRegister(tfa9887,
-                TFA9887_SPKR_CALIBRATION, 0x0C4F); /*  adjusted to mandatory defaults */
+                TFA9887_SPKR_CALIBRATION, 0x3C4E); /*  adjusted to mandatory defaults */
         }
         if (Tfa9887_Error_Ok == error) {
                 error = Tfa9887_WriteRegister(tfa9887, 0x09, 0x025D);
@@ -567,23 +503,13 @@ int coldStarup(struct tfa9887_priv *tfa9887)
                 value |= TFA9887_I2SCTRL_RATE_48000;
                 error = Tfa9887_WriteRegister(tfa9887, TFA9887_I2S_CONTROL, value);
         }
-        //SelectAmplifierInput
-        error = Tfa9887_ReadRegister(tfa9887, TFA9887_I2S_CONTROL, &value);
-        if (error == Tfa9887_Error_Ok) {
-                // clear the 2 bits first
-                value &= ~(0x3<<TFA9887_I2SCTRL_INPUT_SEL_SHIFT);
-
-                value |=(0x2<<TFA9887_I2SCTRL_INPUT_SEL_SHIFT);
-                error = Tfa9887_WriteRegister(tfa9887, TFA9887_I2S_CONTROL, value);
-        }
-        //Set Max Volume
-        error = Tfa9887_ReadRegister(tfa9887, TFA9887_AUDIO_CONTROL, &value);
-        if(error == Tfa9887_Error_Ok) {
-                volume_value = 2;
-                value = (value&0x00FF) | (unsigned int)(volume_value<<8);
-                error = Tfa9887_WriteRegister(tfa9887, TFA9887_AUDIO_CONTROL, value);
-        }
-
+       //0db Volume
+       error = Tfa9887_ReadRegister(tfa9887, TFA9887_AUDIO_CONTROL, &value);
+       if(error == Tfa9887_Error_Ok) {
+               volume_value = 0;
+               value = (value&0x00FF) | (unsigned int)(volume_value<<8);
+               error = Tfa9887_WriteRegister(tfa9887, TFA9887_AUDIO_CONTROL, value);
+       }
         //PowerUp
        error = Tfa9887_ReadRegister(tfa9887, TFA9887_SYSTEM_CONTROL, &value);
         if(error == Tfa9887_Error_Ok) {
@@ -591,24 +517,34 @@ int coldStarup(struct tfa9887_priv *tfa9887)
                 error = Tfa9887_WriteRegister(tfa9887, TFA9887_SYSTEM_CONTROL, value);
         }
 
+               //Waiting for IC to startup
+               error = Tfa9887_ReadRegister(tfa9887, TFA9887_STATUS, &value);
+               do {
+                       error = Tfa9887_ReadRegister(tfa9887, TFA9887_STATUS, &value);
+                       tries++;
+               } while ((error == Tfa9887_Error_Ok) && ((value & TFA9887_STATUS_PLLS) == 0) && (tries < 10));
+
         //Firmware
-        error = ProcessPatchFile(tfa9887, 10, coldpatch_data);
-        error = ProcessPatchFile(tfa9887, 2224, n1d2_data);
+        error = ProcessPatchFile(tfa9887, tfa9887_byte, 10, coldpatch_data);
+               error = Tfa9887_ReadRegister(tfa9887, TFA9887_STATUS, &value);
+               if(value & TFA9887_STATUS_ACS)
+                       pr_info("TFA COLD BOOTED\n");
+        error = ProcessPatchFile(tfa9887, tfa9887_byte, 2200, n1d2_data);
 
        return error;
 }
 
-int Init(struct tfa9887_priv *tfa9887)
+int Init(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte)
 {
        int error;
        unsigned int value;
 
-       error = coldStarup(tfa9887);
+       error = coldStartup(tfa9887, tfa9887_byte);
         if(error != Tfa9887_Error_Ok) {
                pr_info("ColdStartup Failed\n");
        }
 
-        //error = loadSettings(tfa9887);
+        error = loadSettings(tfa9887, tfa9887_byte);
         if(error != Tfa9887_Error_Ok) {
                 pr_info("Loading Settings Failed\n");
         }
@@ -637,13 +573,14 @@ int Init(struct tfa9887_priv *tfa9887)
 }
 
 
-int loadSettings(struct tfa9887_priv *tfa9887)
+int loadSettings(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte)
 {
        int error;
         //Load settings
-        error = DspSetParam(tfa9887,MODULE_SPEAKERBOOST, PARAM_SET_LSMODEL, 423, speaker_data);
-        error = DspSetParam(tfa9887, MODULE_SPEAKERBOOST, PARAM_SET_CONFIG, 165, config_data);
-        error = DspSetParam(tfa9887, MODULE_SPEAKERBOOST, PARAM_SET_PRESET, 87, preset_data);
+        error = DspSetParam(tfa9887, tfa9887_byte, MODULE_SPEAKERBOOST, PARAM_SET_LSMODEL, 423, speaker_data);
+        error = DspSetParam(tfa9887, tfa9887_byte, MODULE_SPEAKERBOOST, PARAM_SET_CONFIG, 165, config_data);
+        error = DspSetParam(tfa9887, tfa9887_byte, MODULE_SPEAKERBOOST, PARAM_SET_PRESET, 87, preset_data);
+        error = DspSetParam(tfa9887, tfa9887_byte, MODULE_BIQUADFILTERBANK,0, 180, eq_data);
        return error;
 }
 
@@ -715,10 +652,10 @@ int stereoRouting(struct tfa9887_priv *tfa9887)
 int Tfa9887_Powerdown(int powerdown)
 {
        int error = 0;
-       if(tfa9887R->deviceInit)
+       if((tfa9887R) && (tfa9887R->deviceInit))
                error = Powerdown(tfa9887R, powerdown);
-        if(tfa9887L->deviceInit)
-               error = Powerdown(tfa9887L, powerdown); 
+       if((tfa9887L) && (tfa9887L->deviceInit))
+               error = Powerdown(tfa9887L, powerdown);
        return error;
 }
 
@@ -767,6 +704,13 @@ static const struct regmap_config tfa9887_regmap = {
        .cache_type = REGCACHE_RBTREE,
 };
 
+static const struct regmap_config tfa9887_regmap_byte = {
+        .reg_bits = 8,
+        .val_bits = 8,
+        .volatile_reg = tfa9887_volatile_register,
+        .readable_reg = tfa9887_readable_register,
+        .cache_type = REGCACHE_RBTREE,
+};
 static ssize_t tfa9887_cal_show(struct kobject *kobj,
                struct kobj_attribute *attr, char *buf)
 {
@@ -849,9 +793,13 @@ static __devinit int tfa9887R_i2c_probe(struct i2c_client *i2c,
        pr_info("tfa9887R_i2c_probe\n");
        tfa9887R = devm_kzalloc(&i2c->dev,  sizeof(struct tfa9887_priv),
                              GFP_KERNEL);
+       tfa9887R_byte = devm_kzalloc(&i2c->dev,  sizeof(struct tfa9887_priv),
+                              GFP_KERNEL);
+
        if (tfa9887R == NULL)
                return -ENOMEM;
        tfa9887R->regmap = regmap_init_i2c(i2c, &tfa9887_regmap);
+       tfa9887R_byte->regmap = regmap_init_i2c(i2c, &tfa9887_regmap_byte);
        if (IS_ERR(tfa9887R->regmap)) {
                ret = PTR_ERR(tfa9887R->regmap);
                dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
@@ -860,7 +808,9 @@ static __devinit int tfa9887R_i2c_probe(struct i2c_client *i2c,
        }
 
        i2c_set_clientdata(i2c, tfa9887R);
+       i2c_set_clientdata(i2c, tfa9887R_byte);
        tfa9887R->irq = i2c->irq;
+       tfa9887R_byte->irq = i2c->irq;
        ret = regmap_read(tfa9887R->regmap, TFA9887_REVISIONNUMBER, &val);
        if (ret != 0) {
                dev_err(&i2c->dev, "Failed to read chip revision: %d\n", ret);
@@ -937,9 +887,13 @@ static __devinit int tfa9887L_i2c_probe(struct i2c_client *i2c,
        pr_info("tfa9887L_i2c_probe\n");
        tfa9887L = devm_kzalloc(&i2c->dev,  sizeof(struct tfa9887_priv),
                              GFP_KERNEL);
+       tfa9887L_byte = devm_kzalloc(&i2c->dev,  sizeof(struct tfa9887_priv),
+                              GFP_KERNEL);
+
        if (tfa9887L == NULL)
                return -ENOMEM;
        tfa9887L->regmap = regmap_init_i2c(i2c, &tfa9887_regmap);
+       tfa9887L_byte->regmap = regmap_init_i2c(i2c, &tfa9887_regmap_byte);
        if (IS_ERR(tfa9887L->regmap)) {
                ret = PTR_ERR(tfa9887L->regmap);
                dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
@@ -955,7 +909,7 @@ static __devinit int tfa9887L_i2c_probe(struct i2c_client *i2c,
                goto err;
        }
        dev_info(&i2c->dev, "TFA9887 revision %d\n",val);
-       tfa9887L->deviceInit = true;    
+       tfa9887L->deviceInit = true;
        return 0;
 err:
        regmap_exit(tfa9887L->regmap);
index bf22b47..ce4c816 100644 (file)
@@ -18,25 +18,25 @@ int Tfa9887_ReadRegister(struct tfa9887_priv *tfa9887, unsigned int subaddress,
 
 int Tfa9887_Init(void);
 
-int Init(struct tfa9887_priv *tfa9887);
+int Init(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte);
 
 int Tfa9887_ReadRegister(struct tfa9887_priv *tfa9887, unsigned int subaddress, unsigned int *pValue);
 
 int Tfa9887_WriteRegister(struct tfa9887_priv *tfa9887, unsigned int subaddress, unsigned int value);
 
-int ProcessPatchFile(struct tfa9887_priv *tfa9887, int length, const unsigned char *bytes);
+int ProcessPatchFile(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte, int length, const unsigned char *bytes);
 
 int DspGetParam(struct tfa9887_priv *tfa9887, unsigned char module_id, unsigned char param_id, int num_bytes, const unsigned char *data);
 
-int DspSetParam(struct tfa9887_priv *tfa9887,unsigned char module_id, unsigned char param_id, int num_bytes, const unsigned char *data);
+int DspSetParam(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte, unsigned char module_id, unsigned char param_id, int num_bytes, const unsigned char *data);
 
 int DspWriteMem(struct tfa9887_priv *tfa9887, unsigned int address, int value);
 
-int DspReadMem(struct tfa9887_priv *tfa9887, unsigned short start_offset, int num_words, int *pValues);
+int DspReadMem(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte, unsigned short start_offset, int num_words, int *pValues);
 
-int coldStarup(struct tfa9887_priv *tfa9887);
+int coldStartup(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte);
 
-int loadSettings(struct tfa9887_priv *tfa9887);
+int loadSettings(struct tfa9887_priv *tfa9887, struct tfa9887_priv *tfa9887_byte);
 
 int stereoRouting(struct tfa9887_priv *tfa9887);