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;