summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Zhang <b13634@freescale.com>2012-03-22 10:15:04 +0800
committerGary Zhang <b13634@freescale.com>2012-03-23 14:57:34 +0800
commitf18b6af6d3cc31acdd48069526d699b47727bb2f (patch)
treece4d6b65f9aed8a7fd42a220f1012c65b78ada87
parentd67e86d4de503863af5b4a6ad831e9f31496b0a4 (diff)
ENGR00177581-2 MX6_SABRESD: add wm8962 support
add wm8962 codec support on sabresd revB Signed-off-by: Gary Zhang <b13634@freescale.com>
-rw-r--r--arch/arm/mach-mx6/board-mx6q_sabresd.c87
-rw-r--r--arch/arm/mach-mx6/mx6q_sabresd_pmic_pfuze100.c26
2 files changed, 102 insertions, 11 deletions
diff --git a/arch/arm/mach-mx6/board-mx6q_sabresd.c b/arch/arm/mach-mx6/board-mx6q_sabresd.c
index 5ca5b3d11ba0..a851650acbed 100644
--- a/arch/arm/mach-mx6/board-mx6q_sabresd.c
+++ b/arch/arm/mach-mx6/board-mx6q_sabresd.c
@@ -307,7 +307,7 @@ static struct imx_ssi_platform_data mx6_sabresd_ssi_pdata = {
.flags = IMX_SSI_DMA | IMX_SSI_SYN,
};
-static struct platform_device mx6_sabresd_audio_device = {
+static struct platform_device mx6_sabresd_audio_wm8958_device = {
.name = "imx-wm8958",
};
@@ -359,6 +359,64 @@ static int mxc_wm8958_init(void)
return 0;
}
+static struct platform_device mx6_sabresd_audio_wm8962_device = {
+ .name = "imx-wm8962",
+};
+
+static struct mxc_audio_platform_data wm8962_data = {
+ .ssi_num = 1,
+ .src_port = 2,
+ .ext_port = 3,
+ .hp_gpio = SABRESD_HEADPHONE_DET,
+ .hp_active_low = 1,
+};
+
+static int mxc_wm8962_init(void)
+{
+ struct clk *clko;
+ int rate;
+
+ clko = clk_get(NULL, "clko_clk");
+ if (IS_ERR(clko)) {
+ pr_err("can't get CLKO clock.\n");
+ return PTR_ERR(clko);
+ }
+ /* both audio codec and comera use CLKO clk*/
+ rate = clk_round_rate(clko, 22000000);
+
+ wm8962_data.sysclk = rate;
+ clk_set_rate(clko, rate);
+
+ return 0;
+}
+
+static struct regulator_consumer_supply sabresd_vwm8962_consumers[] = {
+ REGULATOR_SUPPLY("SPKVDD1", "0-001a"),
+ REGULATOR_SUPPLY("SPKVDD2", "0-001a"),
+};
+
+static struct regulator_init_data sabresd_vwm8962_init = {
+ .num_consumer_supplies = ARRAY_SIZE(sabresd_vwm8962_consumers),
+ .consumer_supplies = sabresd_vwm8962_consumers,
+};
+
+static struct fixed_voltage_config sabresd_vwm8962_reg_config = {
+ .supply_name = "SPKVDD",
+ .microvolts = 4200000,
+ .gpio = SABRESD_CODEC_PWR_EN,
+ .enable_high = 1,
+ .enabled_at_boot = 1,
+ .init_data = &sabresd_vwm8962_init,
+};
+
+static struct platform_device sabresd_vwm8962_reg_devices = {
+ .name = "reg-fixed-voltage",
+ .id = 4,
+ .dev = {
+ .platform_data = &sabresd_vwm8962_reg_config,
+ },
+};
+
static void mx6q_csi0_cam_powerdown(int powerdown)
{
if (powerdown)
@@ -648,8 +706,7 @@ static struct fsl_mxc_lightsensor_platform_data ls_data = {
static struct i2c_board_info mxc_i2c0_board_info[] __initdata = {
{
- I2C_BOARD_INFO("wm8958", 0x1a),
- .platform_data = &wm8958_pdata,
+ I2C_BOARD_INFO("wm89**", 0x1a),
},
{
I2C_BOARD_INFO("ov5642", 0x3c),
@@ -1211,11 +1268,21 @@ static struct platform_device sabresd_vmmc_reg_devices = {
static int imx6q_init_audio(void)
{
- mxc_register_device(&mx6_sabresd_audio_device,
- &wm8958_data);
- imx6q_add_imx_ssi(1, &mx6_sabresd_ssi_pdata);
+ if (board_is_mx6_reva()) {
+ mxc_register_device(&mx6_sabresd_audio_wm8958_device,
+ &wm8958_data);
+ imx6q_add_imx_ssi(1, &mx6_sabresd_ssi_pdata);
+
+ mxc_wm8958_init();
+ } else {
+ platform_device_register(&sabresd_vwm8962_reg_devices);
+ mxc_register_device(&mx6_sabresd_audio_wm8962_device,
+ &wm8962_data);
+ imx6q_add_imx_ssi(1, &mx6_sabresd_ssi_pdata);
+
+ mxc_wm8962_init();
+ }
- mxc_wm8958_init();
return 0;
}
@@ -1378,6 +1445,12 @@ static void __init mx6_sabresd_board_init(void)
imx6q_add_mipi_csi2(&mipi_csi2_pdata);
imx6q_add_imx_snvs_rtc();
+ if (board_is_mx6_reva()) {
+ strcpy(mxc_i2c0_board_info[0].type, "wm8958");
+ mxc_i2c0_board_info[0].platform_data = &wm8958_pdata;
+ } else {
+ strcpy(mxc_i2c0_board_info[0].type, "wm8962");
+ }
imx6q_add_imx_i2c(0, &mx6q_sabresd_i2c_data);
imx6q_add_imx_i2c(1, &mx6q_sabresd_i2c_data);
imx6q_add_imx_i2c(2, &mx6q_sabresd_i2c_data);
diff --git a/arch/arm/mach-mx6/mx6q_sabresd_pmic_pfuze100.c b/arch/arm/mach-mx6/mx6q_sabresd_pmic_pfuze100.c
index f6a313e9b04e..5936c6d2579a 100644
--- a/arch/arm/mach-mx6/mx6q_sabresd_pmic_pfuze100.c
+++ b/arch/arm/mach-mx6/mx6q_sabresd_pmic_pfuze100.c
@@ -66,8 +66,9 @@
static struct regulator_consumer_supply sw2_consumers[] = {
- {
- .supply = "GEN_3V3",
+ {
+ .supply = "MICVDD",
+ .dev_name = "0-001a",
}
};
static struct regulator_consumer_supply sw4_consumers[] = {
@@ -91,8 +92,25 @@ static struct regulator_consumer_supply vgen2_consumers[] = {
}
};
static struct regulator_consumer_supply vgen4_consumers[] = {
- {
- .supply = "VGEN4_1V8",
+ {
+ .supply = "DBVDD",
+ .dev_name = "0-001a",
+ },
+ {
+ .supply = "AVDD",
+ .dev_name = "0-001a",
+ },
+ {
+ .supply = "DCVDD",
+ .dev_name = "0-001a",
+ },
+ {
+ .supply = "CPVDD",
+ .dev_name = "0-001a",
+ },
+ {
+ .supply = "PLLVDD",
+ .dev_name = "0-001a",
}
};
static struct regulator_consumer_supply vgen5_consumers[] = {