codec: tpa2051d3: updated driver. moved header into linux, to export it via Kbuild. updated boards
diff --git a/arch/arm/mach-msm/htc/fighter/board-fighter-audio.c b/arch/arm/mach-msm/htc/fighter/board-fighter-audio.c
index 9dbacd9..2261f57 100644
--- a/arch/arm/mach-msm/htc/fighter/board-fighter-audio.c
+++ b/arch/arm/mach-msm/htc/fighter/board-fighter-audio.c
@@ -23,7 +23,7 @@
 #include <sound/jack.h>
 #include <asm/mach-types.h>
 #include <mach/socinfo.h>
-#include <sound/tpa2051d3.h>
+#include <linux/tpa2051d3.h>
 #include <asm/system_info.h>
 
 #include <linux/mfd/wcd9xxx/core.h>
diff --git a/arch/arm/mach-msm/htc/fighter/board-fighter.c b/arch/arm/mach-msm/htc/fighter/board-fighter.c
index 4cb19e7..9caf132 100644
--- a/arch/arm/mach-msm/htc/fighter/board-fighter.c
+++ b/arch/arm/mach-msm/htc/fighter/board-fighter.c
@@ -26,7 +26,7 @@
 #include <linux/regulator/consumer.h>
 #include <linux/spi/spi.h>
 #include <linux/slimbus/slimbus.h>
-#include <sound/tpa2051d3.h>
+#include <linux/tpa2051d3.h>
 #ifdef CONFIG_ANDROID_PMEM
 #include <linux/android_pmem.h>
 #endif
diff --git a/include/linux/Kbuild b/include/linux/Kbuild
index 94ba7dd..9f5ba2a 100644
--- a/include/linux/Kbuild
+++ b/include/linux/Kbuild
@@ -381,6 +381,7 @@
 header-y += tipc.h
 header-y += tipc_config.h
 header-y += toshiba.h
+header-y += tpa2051d3.h
 header-y += tspp.h
 header-y += tty.h
 header-y += types.h
diff --git a/include/sound/tpa2051d3.h b/include/linux/tpa2051d3.h
similarity index 85%
rename from include/sound/tpa2051d3.h
rename to include/linux/tpa2051d3.h
index b12a990..05d326c 100644
--- a/include/sound/tpa2051d3.h
+++ b/include/linux/tpa2051d3.h
@@ -11,7 +11,9 @@
 #define HEADSET_OUTPUT 1
 #define DUAL_OUTPUT 2
 #define HANDSET_OUTPUT 3
-#define LINEOUT_OUTPUT 4
+#define BEATS_ON_OUTPUT 4
+#define BEATS_OFF_OUTPUT 5
+#define LINEOUT_OUTPUT 6
 #define MODE_CMD_LEM 9
 struct tpa2051d3_platform_data {
 	uint32_t gpio_tpa2051_spk_en;
@@ -37,8 +39,10 @@
 	TPA2051_MODE_VOICECALL_HEADSET,
 	TPA2051_MODE_FM_SPKR,
 	TPA2051_MODE_FM_HEADSET,
-	TPA2051_MODE_PLAYBACK_HANDSET,
-	TPA2051_MODE_VOICECALL_HANDSET,
+	TPA2051_MODE_PLAYBACK_REC,
+	TPA2051_MODE_VOICECALL_REC,
+	TPA2051_MODE_PLAYBACK_HEADSET_BEATS_ON,
+	TPA2051_MODE_PLAYBACK_HEADSET_BEATS_OFF,
 	TPA2051_MODE_LINEOUT,
 	TPA2051_MAX_MODE
 };
@@ -54,5 +58,6 @@
 void set_speaker_headset_amp(int on);
 void set_handset_amp(int on);
 void set_usb_audio_amp(int on);
+void set_beats_on(int en);
 #endif
 
diff --git a/sound/soc/codecs/tpa2051d3.c b/sound/soc/codecs/tpa2051d3.c
index 2f73b3e..0669741 100644
--- a/sound/soc/codecs/tpa2051d3.c
+++ b/sound/soc/codecs/tpa2051d3.c
@@ -26,7 +26,7 @@
 #include <linux/input.h>
 #include <linux/workqueue.h>
 #include <linux/freezer.h>
-#include <sound/tpa2051d3.h>
+#include <linux/tpa2051d3.h>
 #include <linux/mutex.h>
 
 #include <linux/gpio.h>
@@ -55,6 +55,10 @@
 			{0x00, 0x8E, 0x25, 0x57, 0x8D, 0xCD, 0x0D};
 static char HANDSET_AMP_ON[] =
 			{0x00, 0x82, 0x25, 0x57, 0x13, 0xCD, 0x0D};
+static char BEATS_AMP_ON[] =
+			{0x00, 0x8C, 0x25, 0x57, 0x73, 0x4D, 0x0D};
+static char BEATS_AMP_OFF[] =
+			{0x00, 0x8C, 0x25, 0x57, 0x73, 0x4D, 0x0D};
 static char LINEOUT_AMP_ON[] =
 			{0x00, 0x8C, 0x25, 0x57, 0x73, 0x4D, 0x0D};
 static char AMP_0FF[] = {0x00, 0x90};
@@ -260,6 +264,22 @@
 	set_amp(on, LINEOUT_AMP_ON);
 }
 
+void set_beats_on(int en)
+{
+	pr_info("%s: %d\n", __func__, en);
+	mutex_lock(&spk_amp_lock);
+	if (en) {
+		tpa2051_i2c_write(BEATS_AMP_ON, AMP_ON_CMD_LEN);
+		pr_info("%s: en(%d) reg_value[5]=%2x, reg_value[6]=%2x\n", __func__,  \
+				en, BEATS_AMP_ON[5], BEATS_AMP_ON[6]);
+	} else {
+		tpa2051_i2c_write(BEATS_AMP_OFF, AMP_ON_CMD_LEN);
+		pr_info("%s: en(%d)  reg_value[5]=%2x, reg_value[6]=%2x\n", __func__,  \
+				en, BEATS_AMP_OFF[5], BEATS_AMP_OFF[6]);
+	}
+	mutex_unlock(&spk_amp_lock);
+}
+
 int update_amp_parameter(int mode)
 {
 	if (mode > tpa2051_mode_cnt)
@@ -276,11 +296,17 @@
 	else if (*(config_data + mode * MODE_CMD_LEM + 1) == HANDSET_OUTPUT)
 		memcpy(HANDSET_AMP_ON, config_data + mode * MODE_CMD_LEM + 2,
 				sizeof(HANDSET_AMP_ON));
+	else if (*(config_data + mode * MODE_CMD_LEM + 1) == BEATS_ON_OUTPUT)
+		memcpy(BEATS_AMP_ON, config_data + mode * MODE_CMD_LEM + 2,
+				sizeof(BEATS_AMP_ON));
+	else if (*(config_data + mode * MODE_CMD_LEM + 1) == BEATS_OFF_OUTPUT)
+		memcpy(BEATS_AMP_OFF, config_data + mode * MODE_CMD_LEM + 2,
+				sizeof(BEATS_AMP_OFF));
 	else if (*(config_data + mode * MODE_CMD_LEM + 1) == LINEOUT_OUTPUT)
 		memcpy(LINEOUT_AMP_ON, config_data + mode * MODE_CMD_LEM + 2,
 				sizeof(LINEOUT_AMP_ON));
 	else {
-		pr_info("[AUD] wrong mode id %d\n", mode);
+		pr_info("wrong mode id %d\n", mode);
 		return -EINVAL;
 	}
 	return 0;
@@ -396,7 +422,8 @@
 		update_amp_parameter(TPA2051_MODE_PLAYBACK_SPKR);
 		update_amp_parameter(TPA2051_MODE_PLAYBACK_HEADSET);
 		update_amp_parameter(TPA2051_MODE_RING);
-		update_amp_parameter(TPA2051_MODE_PLAYBACK_HANDSET);
+		update_amp_parameter(TPA2051_MODE_PLAYBACK_HEADSET_BEATS_ON);
+		update_amp_parameter(TPA2051_MODE_PLAYBACK_HEADSET_BEATS_OFF);
 		update_amp_parameter(TPA2051_MODE_LINEOUT);
 		rc = 0;
 		break;