| /* Copyright (c) 2010-2012, Code Aurora Forum. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 and |
| * only version 2 as published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| */ |
| |
| #include <linux/kernel.h> |
| #include <linux/platform_device.h> |
| #include <linux/gpio.h> |
| #include <linux/delay.h> |
| #include <linux/debugfs.h> |
| #include <linux/mfd/pmic8058.h> |
| #include <linux/mfd/pmic8901.h> |
| #include <linux/mfd/msm-adie-codec.h> |
| #include <linux/regulator/consumer.h> |
| #include <linux/regulator/machine.h> |
| |
| #include <mach/qdsp6v2/audio_dev_ctl.h> |
| #include <sound/apr_audio.h> |
| #include <asm/mach-types.h> |
| #include <asm/uaccess.h> |
| #include <mach/board-msm8660.h> |
| |
| #include "snddev_icodec.h" |
| #include "snddev_ecodec.h" |
| #include "timpani_profile_8x60.h" |
| #include "snddev_hdmi.h" |
| #include "snddev_mi2s.h" |
| #include "snddev_virtual.h" |
| |
| #ifdef CONFIG_DEBUG_FS |
| static struct dentry *debugfs_hsed_config; |
| static void snddev_hsed_config_modify_setting(int type); |
| static void snddev_hsed_config_restore_setting(void); |
| #endif |
| |
| /* GPIO_CLASS_D0_EN */ |
| #define SNDDEV_GPIO_CLASS_D0_EN 227 |
| |
| /* GPIO_CLASS_D1_EN */ |
| #define SNDDEV_GPIO_CLASS_D1_EN 229 |
| |
| #define SNDDEV_GPIO_MIC2_ANCR_SEL 294 |
| #define SNDDEV_GPIO_MIC1_ANCL_SEL 295 |
| #define SNDDEV_GPIO_HS_MIC4_SEL 296 |
| |
| #define DSP_RAM_BASE_8x60 0x46700000 |
| #define DSP_RAM_SIZE_8x60 0x2000000 |
| static int dspcrashd_pdata_8x60 = 0xDEADDEAD; |
| |
| static struct resource resources_dspcrashd_8x60[] = { |
| { |
| .name = "msm_dspcrashd", |
| .start = DSP_RAM_BASE_8x60, |
| .end = DSP_RAM_BASE_8x60 + DSP_RAM_SIZE_8x60, |
| .flags = IORESOURCE_DMA, |
| }, |
| }; |
| |
| struct platform_device msm_device_dspcrashd_8x60 = { |
| .name = "msm_dspcrashd", |
| .num_resources = ARRAY_SIZE(resources_dspcrashd_8x60), |
| .resource = resources_dspcrashd_8x60, |
| .dev = { .platform_data = &dspcrashd_pdata_8x60 }, |
| }; |
| |
| static struct resource msm_cdcclk_ctl_resources[] = { |
| { |
| .name = "msm_snddev_tx_mclk", |
| .start = 108, |
| .end = 108, |
| .flags = IORESOURCE_IO, |
| }, |
| { |
| .name = "msm_snddev_rx_mclk", |
| .start = 109, |
| .end = 109, |
| .flags = IORESOURCE_IO, |
| }, |
| }; |
| |
| static struct platform_device msm_cdcclk_ctl_device = { |
| .name = "msm_cdcclk_ctl", |
| .num_resources = ARRAY_SIZE(msm_cdcclk_ctl_resources), |
| .resource = msm_cdcclk_ctl_resources, |
| }; |
| |
| static struct resource msm_aux_pcm_resources[] = { |
| |
| { |
| .name = "aux_pcm_dout", |
| .start = 111, |
| .end = 111, |
| .flags = IORESOURCE_IO, |
| }, |
| { |
| .name = "aux_pcm_din", |
| .start = 112, |
| .end = 112, |
| .flags = IORESOURCE_IO, |
| }, |
| { |
| .name = "aux_pcm_syncout", |
| .start = 113, |
| .end = 113, |
| .flags = IORESOURCE_IO, |
| }, |
| { |
| .name = "aux_pcm_clkin_a", |
| .start = 114, |
| .end = 114, |
| .flags = IORESOURCE_IO, |
| }, |
| }; |
| |
| static struct platform_device msm_aux_pcm_device = { |
| .name = "msm_aux_pcm", |
| .num_resources = ARRAY_SIZE(msm_aux_pcm_resources), |
| .resource = msm_aux_pcm_resources, |
| }; |
| |
| static struct resource msm_mi2s_gpio_resources[] = { |
| |
| { |
| .name = "mi2s_ws", |
| .start = 101, |
| .end = 101, |
| .flags = IORESOURCE_IO, |
| }, |
| { |
| .name = "mi2s_sclk", |
| .start = 102, |
| .end = 102, |
| .flags = IORESOURCE_IO, |
| }, |
| { |
| .name = "mi2s_mclk", |
| .start = 103, |
| .end = 103, |
| .flags = IORESOURCE_IO, |
| }, |
| { |
| .name = "fm_mi2s_sd", |
| .start = 107, |
| .end = 107, |
| .flags = IORESOURCE_IO, |
| }, |
| }; |
| |
| static struct platform_device msm_mi2s_device = { |
| .name = "msm_mi2s", |
| .num_resources = ARRAY_SIZE(msm_mi2s_gpio_resources), |
| .resource = msm_mi2s_gpio_resources, |
| }; |
| |
| /* Must be same size as msm_icodec_gpio_resources */ |
| static int msm_icodec_gpio_defaults[] = { |
| 0, |
| 0, |
| }; |
| |
| static struct resource msm_icodec_gpio_resources[] = { |
| { |
| .name = "msm_icodec_speaker_left", |
| .start = SNDDEV_GPIO_CLASS_D0_EN, |
| .end = SNDDEV_GPIO_CLASS_D0_EN, |
| .flags = IORESOURCE_IO, |
| }, |
| { |
| .name = "msm_icodec_speaker_right", |
| .start = SNDDEV_GPIO_CLASS_D1_EN, |
| .end = SNDDEV_GPIO_CLASS_D1_EN, |
| .flags = IORESOURCE_IO, |
| }, |
| }; |
| |
| static struct platform_device msm_icodec_gpio_device = { |
| .name = "msm_icodec_gpio", |
| .num_resources = ARRAY_SIZE(msm_icodec_gpio_resources), |
| .resource = msm_icodec_gpio_resources, |
| .dev = { .platform_data = &msm_icodec_gpio_defaults }, |
| }; |
| |
| static struct regulator *s3; |
| static struct regulator *mvs; |
| |
| static int msm_snddev_enable_dmic_power(void) |
| { |
| int ret; |
| |
| s3 = regulator_get(NULL, "8058_s3"); |
| if (IS_ERR(s3)) { |
| ret = -EBUSY; |
| goto fail_get_s3; |
| } |
| |
| ret = regulator_set_voltage(s3, 1800000, 1800000); |
| if (ret) { |
| pr_err("%s: error setting voltage\n", __func__); |
| goto fail_s3; |
| } |
| |
| ret = regulator_enable(s3); |
| if (ret) { |
| pr_err("%s: error enabling regulator\n", __func__); |
| goto fail_s3; |
| } |
| |
| mvs = regulator_get(NULL, "8901_mvs0"); |
| if (IS_ERR(mvs)) |
| goto fail_mvs0_get; |
| |
| ret = regulator_enable(mvs); |
| if (ret) { |
| pr_err("%s: error setting regulator\n", __func__); |
| goto fail_mvs0_enable; |
| } |
| return ret; |
| |
| fail_mvs0_enable: |
| regulator_put(mvs); |
| mvs = NULL; |
| fail_mvs0_get: |
| regulator_disable(s3); |
| fail_s3: |
| regulator_put(s3); |
| s3 = NULL; |
| fail_get_s3: |
| return ret; |
| } |
| |
| static void msm_snddev_disable_dmic_power(void) |
| { |
| int ret; |
| |
| if (mvs) { |
| ret = regulator_disable(mvs); |
| if (ret < 0) |
| pr_err("%s: error disabling vreg mvs\n", __func__); |
| regulator_put(mvs); |
| mvs = NULL; |
| } |
| |
| if (s3) { |
| ret = regulator_disable(s3); |
| if (ret < 0) |
| pr_err("%s: error disabling regulator s3\n", __func__); |
| regulator_put(s3); |
| s3 = NULL; |
| } |
| } |
| |
| #define PM8901_MPP_3 (2) /* PM8901 MPP starts from 0 */ |
| |
| static int config_class_d0_gpio(int enable) |
| { |
| int rc; |
| |
| struct pm8xxx_mpp_config_data class_d0_mpp = { |
| .type = PM8XXX_MPP_TYPE_D_OUTPUT, |
| .level = PM8901_MPP_DIG_LEVEL_MSMIO, |
| }; |
| |
| if (enable) { |
| class_d0_mpp.control = PM8XXX_MPP_DOUT_CTRL_HIGH; |
| rc = pm8xxx_mpp_config(PM8901_MPP_PM_TO_SYS(PM8901_MPP_3), |
| &class_d0_mpp); |
| if (rc) { |
| pr_err("%s: CLASS_D0_EN failed\n", __func__); |
| return rc; |
| } |
| |
| rc = gpio_request(SNDDEV_GPIO_CLASS_D0_EN, "CLASSD0_EN"); |
| |
| if (rc) { |
| pr_err("%s: spkr pamp gpio pm8901 mpp3 request" |
| "failed\n", __func__); |
| class_d0_mpp.control = PM8XXX_MPP_DOUT_CTRL_LOW; |
| pm8xxx_mpp_config(PM8901_MPP_PM_TO_SYS(PM8901_MPP_3), |
| &class_d0_mpp); |
| return rc; |
| } |
| |
| gpio_direction_output(SNDDEV_GPIO_CLASS_D0_EN, 1); |
| gpio_set_value_cansleep(SNDDEV_GPIO_CLASS_D0_EN, 1); |
| |
| } else { |
| class_d0_mpp.control = PM8XXX_MPP_DOUT_CTRL_LOW; |
| pm8xxx_mpp_config(PM8901_MPP_PM_TO_SYS(PM8901_MPP_3), |
| &class_d0_mpp); |
| gpio_set_value_cansleep(SNDDEV_GPIO_CLASS_D0_EN, 0); |
| gpio_free(SNDDEV_GPIO_CLASS_D0_EN); |
| } |
| return 0; |
| } |
| |
| static int config_class_d1_gpio(int enable) |
| { |
| int rc; |
| |
| if (enable) { |
| rc = gpio_request(SNDDEV_GPIO_CLASS_D1_EN, "CLASSD1_EN"); |
| |
| if (rc) { |
| pr_err("%s: Right Channel spkr gpio request" |
| " failed\n", __func__); |
| return rc; |
| } |
| |
| gpio_direction_output(SNDDEV_GPIO_CLASS_D1_EN, 1); |
| gpio_set_value_cansleep(SNDDEV_GPIO_CLASS_D1_EN, 1); |
| |
| } else { |
| gpio_set_value_cansleep(SNDDEV_GPIO_CLASS_D1_EN, 0); |
| gpio_free(SNDDEV_GPIO_CLASS_D1_EN); |
| } |
| return 0; |
| } |
| |
| static atomic_t pamp_ref_cnt; |
| |
| static int msm_snddev_poweramp_on(void) |
| { |
| int rc; |
| |
| if (atomic_inc_return(&pamp_ref_cnt) > 1) |
| return 0; |
| |
| pr_debug("%s: enable stereo spkr amp\n", __func__); |
| rc = config_class_d0_gpio(1); |
| if (rc) { |
| pr_err("%s: d0 gpio configuration failed\n", __func__); |
| goto config_gpio_fail; |
| } |
| rc = config_class_d1_gpio(1); |
| if (rc) { |
| pr_err("%s: d1 gpio configuration failed\n", __func__); |
| goto config_gpio_fail; |
| } |
| config_gpio_fail: |
| return rc; |
| } |
| |
| static void msm_snddev_poweramp_off(void) |
| { |
| if (atomic_dec_return(&pamp_ref_cnt) == 0) { |
| pr_debug("%s: disable stereo spkr amp\n", __func__); |
| config_class_d0_gpio(0); |
| config_class_d1_gpio(0); |
| msleep(30); |
| } |
| } |
| |
| /* Regulator 8058_l10 supplies regulator 8058_ncp. */ |
| static struct regulator *snddev_reg_ncp; |
| static struct regulator *snddev_reg_l10; |
| |
| static atomic_t preg_ref_cnt; |
| |
| static int msm_snddev_voltage_on(void) |
| { |
| int rc; |
| pr_debug("%s\n", __func__); |
| |
| if (atomic_inc_return(&preg_ref_cnt) > 1) |
| return 0; |
| |
| snddev_reg_l10 = regulator_get(NULL, "8058_l10"); |
| if (IS_ERR(snddev_reg_l10)) { |
| pr_err("%s: regulator_get(%s) failed (%ld)\n", __func__, |
| "l10", PTR_ERR(snddev_reg_l10)); |
| return -EBUSY; |
| } |
| |
| rc = regulator_set_voltage(snddev_reg_l10, 2600000, 2600000); |
| if (rc < 0) |
| pr_err("%s: regulator_set_voltage(l10) failed (%d)\n", |
| __func__, rc); |
| |
| rc = regulator_enable(snddev_reg_l10); |
| if (rc < 0) |
| pr_err("%s: regulator_enable(l10) failed (%d)\n", __func__, rc); |
| |
| snddev_reg_ncp = regulator_get(NULL, "8058_ncp"); |
| if (IS_ERR(snddev_reg_ncp)) { |
| pr_err("%s: regulator_get(%s) failed (%ld)\n", __func__, |
| "ncp", PTR_ERR(snddev_reg_ncp)); |
| return -EBUSY; |
| } |
| |
| rc = regulator_set_voltage(snddev_reg_ncp, 1800000, 1800000); |
| if (rc < 0) { |
| pr_err("%s: regulator_set_voltage(ncp) failed (%d)\n", |
| __func__, rc); |
| goto regulator_fail; |
| } |
| |
| rc = regulator_enable(snddev_reg_ncp); |
| if (rc < 0) { |
| pr_err("%s: regulator_enable(ncp) failed (%d)\n", __func__, rc); |
| goto regulator_fail; |
| } |
| |
| return rc; |
| |
| regulator_fail: |
| regulator_put(snddev_reg_ncp); |
| snddev_reg_ncp = NULL; |
| return rc; |
| } |
| |
| static void msm_snddev_voltage_off(void) |
| { |
| int rc; |
| pr_debug("%s\n", __func__); |
| |
| if (!snddev_reg_ncp) |
| goto done; |
| |
| if (atomic_dec_return(&preg_ref_cnt) == 0) { |
| rc = regulator_disable(snddev_reg_ncp); |
| if (rc < 0) |
| pr_err("%s: regulator_disable(ncp) failed (%d)\n", |
| __func__, rc); |
| regulator_put(snddev_reg_ncp); |
| |
| snddev_reg_ncp = NULL; |
| } |
| |
| done: |
| if (!snddev_reg_l10) |
| return; |
| |
| rc = regulator_disable(snddev_reg_l10); |
| if (rc < 0) |
| pr_err("%s: regulator_disable(l10) failed (%d)\n", |
| __func__, rc); |
| |
| regulator_put(snddev_reg_l10); |
| |
| snddev_reg_l10 = NULL; |
| } |
| |
| static int msm_snddev_enable_amic_power(void) |
| { |
| int ret = 0; |
| #ifdef CONFIG_PMIC8058_OTHC |
| |
| if (machine_is_msm8x60_fluid()) { |
| |
| ret = pm8058_micbias_enable(OTHC_MICBIAS_0, |
| OTHC_SIGNAL_ALWAYS_ON); |
| if (ret) |
| pr_err("%s: Enabling amic power failed\n", __func__); |
| |
| ret = gpio_request(SNDDEV_GPIO_MIC2_ANCR_SEL, "MIC2_ANCR_SEL"); |
| if (ret) { |
| pr_err("%s: spkr pamp gpio %d request failed\n", |
| __func__, SNDDEV_GPIO_MIC2_ANCR_SEL); |
| return ret; |
| } |
| gpio_direction_output(SNDDEV_GPIO_MIC2_ANCR_SEL, 0); |
| |
| ret = gpio_request(SNDDEV_GPIO_MIC1_ANCL_SEL, "MIC1_ANCL_SEL"); |
| if (ret) { |
| pr_err("%s: mic1 ancl gpio %d request failed\n", |
| __func__, SNDDEV_GPIO_MIC1_ANCL_SEL); |
| gpio_free(SNDDEV_GPIO_MIC2_ANCR_SEL); |
| return ret; |
| } |
| gpio_direction_output(SNDDEV_GPIO_MIC1_ANCL_SEL, 0); |
| |
| } else { |
| ret = pm8058_micbias_enable(OTHC_MICBIAS_2, |
| OTHC_SIGNAL_ALWAYS_ON); |
| if (ret) |
| pr_err("%s: Enabling amic power failed\n", __func__); |
| } |
| #endif |
| return ret; |
| } |
| |
| static void msm_snddev_disable_amic_power(void) |
| { |
| #ifdef CONFIG_PMIC8058_OTHC |
| int ret; |
| if (machine_is_msm8x60_fluid()) { |
| ret = pm8058_micbias_enable(OTHC_MICBIAS_0, |
| OTHC_SIGNAL_OFF); |
| gpio_free(SNDDEV_GPIO_MIC1_ANCL_SEL); |
| gpio_free(SNDDEV_GPIO_MIC2_ANCR_SEL); |
| } else |
| ret = pm8058_micbias_enable(OTHC_MICBIAS_2, OTHC_SIGNAL_OFF); |
| |
| if (ret) |
| pr_err("%s: Disabling amic power failed\n", __func__); |
| #endif |
| } |
| |
| static int msm_snddev_enable_anc_power(void) |
| { |
| int ret = 0; |
| #ifdef CONFIG_PMIC8058_OTHC |
| ret = pm8058_micbias_enable(OTHC_MICBIAS_2, |
| OTHC_SIGNAL_ALWAYS_ON); |
| if (ret) |
| pr_err("%s: Enabling anc micbias 2 failed\n", __func__); |
| |
| if (machine_is_msm8x60_fluid()) { |
| |
| ret = pm8058_micbias_enable(OTHC_MICBIAS_0, |
| OTHC_SIGNAL_ALWAYS_ON); |
| if (ret) |
| pr_err("%s: Enabling anc micbias 0 failed\n", __func__); |
| |
| ret = gpio_request(SNDDEV_GPIO_MIC2_ANCR_SEL, "MIC2_ANCR_SEL"); |
| if (ret) { |
| pr_err("%s: mic2 ancr gpio %d request failed\n", |
| __func__, SNDDEV_GPIO_MIC2_ANCR_SEL); |
| return ret; |
| } |
| gpio_direction_output(SNDDEV_GPIO_MIC2_ANCR_SEL, 1); |
| |
| ret = gpio_request(SNDDEV_GPIO_MIC1_ANCL_SEL, "MIC1_ANCL_SEL"); |
| if (ret) { |
| pr_err("%s: mic1 ancl gpio %d request failed\n", |
| __func__, SNDDEV_GPIO_MIC1_ANCL_SEL); |
| gpio_free(SNDDEV_GPIO_MIC2_ANCR_SEL); |
| return ret; |
| } |
| gpio_direction_output(SNDDEV_GPIO_MIC1_ANCL_SEL, 1); |
| |
| } |
| #endif |
| return ret; |
| } |
| |
| static void msm_snddev_disable_anc_power(void) |
| { |
| #ifdef CONFIG_PMIC8058_OTHC |
| int ret; |
| |
| ret = pm8058_micbias_enable(OTHC_MICBIAS_2, OTHC_SIGNAL_OFF); |
| |
| if (machine_is_msm8x60_fluid()) { |
| ret |= pm8058_micbias_enable(OTHC_MICBIAS_0, |
| OTHC_SIGNAL_OFF); |
| gpio_free(SNDDEV_GPIO_MIC2_ANCR_SEL); |
| gpio_free(SNDDEV_GPIO_MIC1_ANCL_SEL); |
| } |
| |
| if (ret) |
| pr_err("%s: Disabling anc power failed\n", __func__); |
| #endif |
| } |
| |
| static int msm_snddev_enable_amic_sec_power(void) |
| { |
| #ifdef CONFIG_PMIC8058_OTHC |
| int ret; |
| |
| if (machine_is_msm8x60_fluid()) { |
| |
| ret = pm8058_micbias_enable(OTHC_MICBIAS_2, |
| OTHC_SIGNAL_ALWAYS_ON); |
| if (ret) |
| pr_err("%s: Enabling amic2 power failed\n", __func__); |
| |
| ret = gpio_request(SNDDEV_GPIO_HS_MIC4_SEL, |
| "HS_MIC4_SEL"); |
| if (ret) { |
| pr_err("%s: spkr pamp gpio %d request failed\n", |
| __func__, SNDDEV_GPIO_HS_MIC4_SEL); |
| return ret; |
| } |
| gpio_direction_output(SNDDEV_GPIO_HS_MIC4_SEL, 1); |
| } |
| #endif |
| |
| msm_snddev_enable_amic_power(); |
| return 0; |
| } |
| |
| static void msm_snddev_disable_amic_sec_power(void) |
| { |
| #ifdef CONFIG_PMIC8058_OTHC |
| int ret; |
| if (machine_is_msm8x60_fluid()) { |
| |
| ret = pm8058_micbias_enable(OTHC_MICBIAS_2, |
| OTHC_SIGNAL_OFF); |
| if (ret) |
| pr_err("%s: Disabling amic2 power failed\n", __func__); |
| |
| gpio_free(SNDDEV_GPIO_HS_MIC4_SEL); |
| } |
| #endif |
| |
| msm_snddev_disable_amic_power(); |
| } |
| |
| static int msm_snddev_enable_dmic_sec_power(void) |
| { |
| int ret; |
| |
| ret = msm_snddev_enable_dmic_power(); |
| if (ret) { |
| pr_err("%s: Error: Enabling dmic power failed\n", __func__); |
| return ret; |
| } |
| #ifdef CONFIG_PMIC8058_OTHC |
| ret = pm8058_micbias_enable(OTHC_MICBIAS_2, OTHC_SIGNAL_ALWAYS_ON); |
| if (ret) { |
| pr_err("%s: Error: Enabling micbias failed\n", __func__); |
| msm_snddev_disable_dmic_power(); |
| return ret; |
| } |
| #endif |
| return 0; |
| } |
| |
| static void msm_snddev_disable_dmic_sec_power(void) |
| { |
| msm_snddev_disable_dmic_power(); |
| |
| #ifdef CONFIG_PMIC8058_OTHC |
| pm8058_micbias_enable(OTHC_MICBIAS_2, OTHC_SIGNAL_OFF); |
| #endif |
| } |
| |
| static struct adie_codec_action_unit iearpiece_48KHz_osr256_actions[] = |
| EAR_PRI_MONO_8000_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry iearpiece_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = iearpiece_48KHz_osr256_actions, |
| .action_sz = ARRAY_SIZE(iearpiece_48KHz_osr256_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile iearpiece_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = iearpiece_settings, |
| .setting_sz = ARRAY_SIZE(iearpiece_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_iearpiece_data = { |
| .capability = (SNDDEV_CAP_RX | SNDDEV_CAP_VOICE), |
| .name = "handset_rx", |
| .copp_id = 0, |
| .profile = &iearpiece_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| }; |
| |
| static struct platform_device msm_iearpiece_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_iearpiece_data }, |
| }; |
| |
| static struct adie_codec_action_unit imic_48KHz_osr256_actions[] = |
| AMIC_PRI_MONO_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry imic_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = imic_48KHz_osr256_actions, |
| .action_sz = ARRAY_SIZE(imic_48KHz_osr256_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile imic_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = imic_settings, |
| .setting_sz = ARRAY_SIZE(imic_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_imic_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "handset_tx", |
| .copp_id = 1, |
| .profile = &imic_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_amic_power, |
| .pamp_off = msm_snddev_disable_amic_power, |
| }; |
| |
| static struct platform_device msm_imic_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_imic_data }, |
| }; |
| |
| static struct snddev_icodec_data snddev_fluid_ispkr_mic_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "speaker_mono_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &imic_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_amic_power, |
| .pamp_off = msm_snddev_disable_amic_power, |
| }; |
| |
| static struct platform_device msm_fluid_ispkr_mic_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_fluid_ispkr_mic_data }, |
| }; |
| |
| |
| static struct adie_codec_action_unit headset_ab_cpls_48KHz_osr256_actions[] = |
| HEADSET_AB_CPLS_48000_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry headset_ab_cpls_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = headset_ab_cpls_48KHz_osr256_actions, |
| .action_sz = ARRAY_SIZE(headset_ab_cpls_48KHz_osr256_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile headset_ab_cpls_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = headset_ab_cpls_settings, |
| .setting_sz = ARRAY_SIZE(headset_ab_cpls_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_ihs_stereo_rx_data = { |
| .capability = (SNDDEV_CAP_RX | SNDDEV_CAP_VOICE), |
| .name = "headset_stereo_rx", |
| .copp_id = 0, |
| .profile = &headset_ab_cpls_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .voltage_on = msm_snddev_voltage_on, |
| .voltage_off = msm_snddev_voltage_off, |
| }; |
| |
| static struct platform_device msm_headset_stereo_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_ihs_stereo_rx_data }, |
| }; |
| |
| static struct adie_codec_action_unit headset_anc_48KHz_osr256_actions[] = |
| ANC_HEADSET_CPLS_AMIC1_AUXL_RX1_48000_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry headset_anc_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = headset_anc_48KHz_osr256_actions, |
| .action_sz = ARRAY_SIZE(headset_anc_48KHz_osr256_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile headset_anc_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = headset_anc_settings, |
| .setting_sz = ARRAY_SIZE(headset_anc_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_anc_headset_data = { |
| .capability = (SNDDEV_CAP_RX | SNDDEV_CAP_VOICE | SNDDEV_CAP_ANC), |
| .name = "anc_headset_stereo_rx", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &headset_anc_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_anc_power, |
| .pamp_off = msm_snddev_disable_anc_power, |
| .voltage_on = msm_snddev_voltage_on, |
| .voltage_off = msm_snddev_voltage_off, |
| }; |
| |
| static struct platform_device msm_anc_headset_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_anc_headset_data }, |
| }; |
| |
| static struct adie_codec_action_unit ispkr_stereo_48KHz_osr256_actions[] = |
| SPEAKER_PRI_STEREO_48000_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry ispkr_stereo_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ispkr_stereo_48KHz_osr256_actions, |
| .action_sz = ARRAY_SIZE(ispkr_stereo_48KHz_osr256_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile ispkr_stereo_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ispkr_stereo_settings, |
| .setting_sz = ARRAY_SIZE(ispkr_stereo_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_ispkr_stereo_data = { |
| .capability = (SNDDEV_CAP_RX | SNDDEV_CAP_VOICE), |
| .name = "speaker_stereo_rx", |
| .copp_id = 0, |
| .profile = &ispkr_stereo_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_poweramp_on, |
| .pamp_off = msm_snddev_poweramp_off, |
| }; |
| |
| static struct platform_device msm_ispkr_stereo_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_ispkr_stereo_data }, |
| }; |
| |
| static struct adie_codec_action_unit idmic_mono_48KHz_osr256_actions[] = |
| DMIC1_PRI_MONO_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry idmic_mono_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = idmic_mono_48KHz_osr256_actions, |
| .action_sz = ARRAY_SIZE(idmic_mono_48KHz_osr256_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile idmic_mono_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = idmic_mono_settings, |
| .setting_sz = ARRAY_SIZE(idmic_mono_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_ispkr_mic_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "speaker_mono_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &idmic_mono_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_dmic_power, |
| .pamp_off = msm_snddev_disable_dmic_power, |
| }; |
| |
| static struct platform_device msm_ispkr_mic_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_ispkr_mic_data }, |
| }; |
| |
| static struct adie_codec_action_unit iearpiece_ffa_48KHz_osr256_actions[] = |
| EAR_PRI_MONO_8000_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry iearpiece_ffa_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = iearpiece_ffa_48KHz_osr256_actions, |
| .action_sz = ARRAY_SIZE(iearpiece_ffa_48KHz_osr256_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile iearpiece_ffa_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = iearpiece_ffa_settings, |
| .setting_sz = ARRAY_SIZE(iearpiece_ffa_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_iearpiece_ffa_data = { |
| .capability = (SNDDEV_CAP_RX | SNDDEV_CAP_VOICE), |
| .name = "handset_rx", |
| .copp_id = 0, |
| .profile = &iearpiece_ffa_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| }; |
| |
| static struct platform_device msm_iearpiece_ffa_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_iearpiece_ffa_data }, |
| }; |
| |
| static struct snddev_icodec_data snddev_imic_ffa_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "handset_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &idmic_mono_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_dmic_power, |
| .pamp_off = msm_snddev_disable_dmic_power, |
| }; |
| |
| static struct platform_device msm_imic_ffa_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_imic_ffa_data }, |
| }; |
| |
| static struct adie_codec_action_unit dual_mic_endfire_8KHz_osr256_actions[] = |
| DMIC1_PRI_STEREO_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry dual_mic_endfire_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = dual_mic_endfire_8KHz_osr256_actions, |
| .action_sz = ARRAY_SIZE(dual_mic_endfire_8KHz_osr256_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile dual_mic_endfire_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = dual_mic_endfire_settings, |
| .setting_sz = ARRAY_SIZE(dual_mic_endfire_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_dual_mic_endfire_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "handset_dual_mic_endfire_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &dual_mic_endfire_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_dmic_power, |
| .pamp_off = msm_snddev_disable_dmic_power, |
| }; |
| |
| static struct platform_device msm_hs_dual_mic_endfire_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_dual_mic_endfire_data }, |
| }; |
| |
| static struct snddev_icodec_data snddev_dual_mic_spkr_endfire_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "speaker_dual_mic_endfire_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &dual_mic_endfire_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_dmic_power, |
| .pamp_off = msm_snddev_disable_dmic_power, |
| }; |
| |
| static struct platform_device msm_spkr_dual_mic_endfire_device = { |
| .name = "snddev_icodec", |
| .id = 15, |
| .dev = { .platform_data = &snddev_dual_mic_spkr_endfire_data }, |
| }; |
| |
| static struct adie_codec_action_unit dual_mic_broadside_8osr256_actions[] = |
| HS_DMIC2_STEREO_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry dual_mic_broadside_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = dual_mic_broadside_8osr256_actions, |
| .action_sz = ARRAY_SIZE(dual_mic_broadside_8osr256_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile dual_mic_broadside_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = dual_mic_broadside_settings, |
| .setting_sz = ARRAY_SIZE(dual_mic_broadside_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_hs_dual_mic_broadside_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "handset_dual_mic_broadside_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &dual_mic_broadside_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_dmic_sec_power, |
| .pamp_off = msm_snddev_disable_dmic_sec_power, |
| }; |
| |
| static struct platform_device msm_hs_dual_mic_broadside_device = { |
| .name = "snddev_icodec", |
| .id = 21, |
| .dev = { .platform_data = &snddev_hs_dual_mic_broadside_data }, |
| }; |
| |
| static struct snddev_icodec_data snddev_spkr_dual_mic_broadside_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "speaker_dual_mic_broadside_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &dual_mic_broadside_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_dmic_sec_power, |
| .pamp_off = msm_snddev_disable_dmic_sec_power, |
| }; |
| |
| static struct platform_device msm_spkr_dual_mic_broadside_device = { |
| .name = "snddev_icodec", |
| .id = 18, |
| .dev = { .platform_data = &snddev_spkr_dual_mic_broadside_data }, |
| }; |
| |
| static struct adie_codec_action_unit |
| fluid_dual_mic_endfire_8KHz_osr256_actions[] = |
| FLUID_AMIC_DUAL_8000_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry fluid_dual_mic_endfire_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = fluid_dual_mic_endfire_8KHz_osr256_actions, |
| .action_sz = |
| ARRAY_SIZE(fluid_dual_mic_endfire_8KHz_osr256_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile fluid_dual_mic_endfire_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = fluid_dual_mic_endfire_settings, |
| .setting_sz = ARRAY_SIZE(fluid_dual_mic_endfire_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_fluid_dual_mic_endfire_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "handset_dual_mic_endfire_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &fluid_dual_mic_endfire_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_amic_sec_power, |
| .pamp_off = msm_snddev_disable_amic_sec_power, |
| }; |
| |
| static struct platform_device msm_fluid_hs_dual_mic_endfire_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_fluid_dual_mic_endfire_data }, |
| }; |
| |
| static struct snddev_icodec_data snddev_fluid_dual_mic_spkr_endfire_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "speaker_dual_mic_endfire_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &fluid_dual_mic_endfire_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_amic_sec_power, |
| .pamp_off = msm_snddev_disable_amic_sec_power, |
| }; |
| |
| static struct platform_device msm_fluid_spkr_dual_mic_endfire_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_fluid_dual_mic_spkr_endfire_data }, |
| }; |
| |
| static struct adie_codec_action_unit |
| fluid_dual_mic_broadside_8KHz_osr256_actions[] = |
| FLUID_AMIC_DUAL_BROADSIDE_8000_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry fluid_dual_mic_broadside_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = fluid_dual_mic_broadside_8KHz_osr256_actions, |
| .action_sz = |
| ARRAY_SIZE(fluid_dual_mic_broadside_8KHz_osr256_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile fluid_dual_mic_broadside_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = fluid_dual_mic_broadside_settings, |
| .setting_sz = ARRAY_SIZE(fluid_dual_mic_broadside_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_fluid_dual_mic_broadside_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "handset_dual_mic_broadside_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &fluid_dual_mic_broadside_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_amic_power, |
| .pamp_off = msm_snddev_disable_amic_power, |
| }; |
| |
| static struct platform_device msm_fluid_hs_dual_mic_broadside_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_fluid_dual_mic_broadside_data }, |
| }; |
| |
| static struct snddev_icodec_data snddev_fluid_dual_mic_spkr_broadside_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "speaker_dual_mic_broadside_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &fluid_dual_mic_broadside_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_amic_power, |
| .pamp_off = msm_snddev_disable_amic_power, |
| }; |
| |
| static struct platform_device msm_fluid_spkr_dual_mic_broadside_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_fluid_dual_mic_spkr_broadside_data }, |
| }; |
| |
| static struct snddev_hdmi_data snddev_hdmi_stereo_rx_data = { |
| .capability = SNDDEV_CAP_RX , |
| .name = "hdmi_stereo_rx", |
| .copp_id = HDMI_RX, |
| .channel_mode = 0, |
| .default_sample_rate = 48000, |
| }; |
| |
| static struct platform_device msm_snddev_hdmi_stereo_rx_device = { |
| .name = "snddev_hdmi", |
| .dev = { .platform_data = &snddev_hdmi_stereo_rx_data }, |
| }; |
| |
| static struct snddev_mi2s_data snddev_mi2s_fm_tx_data = { |
| .capability = SNDDEV_CAP_TX , |
| .name = "fmradio_stereo_tx", |
| .copp_id = MI2S_TX, |
| .channel_mode = 2, /* stereo */ |
| .sd_lines = MI2S_SD3, /* sd3 */ |
| .sample_rate = 48000, |
| }; |
| |
| static struct platform_device msm_mi2s_fm_tx_device = { |
| .name = "snddev_mi2s", |
| .dev = { .platform_data = &snddev_mi2s_fm_tx_data }, |
| }; |
| |
| static struct snddev_mi2s_data snddev_mi2s_fm_rx_data = { |
| .capability = SNDDEV_CAP_RX , |
| .name = "fmradio_stereo_rx", |
| .copp_id = MI2S_RX, |
| .channel_mode = 2, /* stereo */ |
| .sd_lines = MI2S_SD3, /* sd3 */ |
| .sample_rate = 48000, |
| }; |
| |
| static struct platform_device msm_mi2s_fm_rx_device = { |
| .name = "snddev_mi2s", |
| .id = 1, |
| .dev = { .platform_data = &snddev_mi2s_fm_rx_data }, |
| }; |
| |
| static struct adie_codec_action_unit iheadset_mic_tx_osr256_actions[] = |
| HEADSET_AMIC2_TX_MONO_PRI_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry iheadset_mic_tx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = iheadset_mic_tx_osr256_actions, |
| .action_sz = ARRAY_SIZE(iheadset_mic_tx_osr256_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile iheadset_mic_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = iheadset_mic_tx_settings, |
| .setting_sz = ARRAY_SIZE(iheadset_mic_tx_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_headset_mic_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "headset_mono_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &iheadset_mic_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| }; |
| |
| static struct platform_device msm_headset_mic_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_headset_mic_data }, |
| }; |
| |
| static struct adie_codec_action_unit |
| ihs_stereo_speaker_stereo_rx_48KHz_osr256_actions[] = |
| SPEAKER_HPH_AB_CPL_PRI_STEREO_48000_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry |
| ihs_stereo_speaker_stereo_rx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ihs_stereo_speaker_stereo_rx_48KHz_osr256_actions, |
| .action_sz = |
| ARRAY_SIZE(ihs_stereo_speaker_stereo_rx_48KHz_osr256_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile ihs_stereo_speaker_stereo_rx_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ihs_stereo_speaker_stereo_rx_settings, |
| .setting_sz = ARRAY_SIZE(ihs_stereo_speaker_stereo_rx_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_ihs_stereo_speaker_stereo_rx_data = { |
| .capability = (SNDDEV_CAP_RX | SNDDEV_CAP_VOICE), |
| .name = "headset_stereo_speaker_stereo_rx", |
| .copp_id = 0, |
| .profile = &ihs_stereo_speaker_stereo_rx_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_poweramp_on, |
| .pamp_off = msm_snddev_poweramp_off, |
| .voltage_on = msm_snddev_voltage_on, |
| .voltage_off = msm_snddev_voltage_off, |
| }; |
| |
| static struct platform_device msm_ihs_stereo_speaker_stereo_rx_device = { |
| .name = "snddev_icodec", |
| .id = 22, |
| .dev = { .platform_data = &snddev_ihs_stereo_speaker_stereo_rx_data }, |
| }; |
| |
| /* define the value for BT_SCO */ |
| |
| static struct snddev_ecodec_data snddev_bt_sco_earpiece_data = { |
| .capability = (SNDDEV_CAP_RX | SNDDEV_CAP_VOICE), |
| .name = "bt_sco_rx", |
| .copp_id = PCM_RX, |
| .channel_mode = 1, |
| }; |
| |
| static struct snddev_ecodec_data snddev_bt_sco_mic_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "bt_sco_tx", |
| .copp_id = PCM_TX, |
| .channel_mode = 1, |
| }; |
| |
| struct platform_device msm_bt_sco_earpiece_device = { |
| .name = "msm_snddev_ecodec", |
| .dev = { .platform_data = &snddev_bt_sco_earpiece_data }, |
| }; |
| |
| struct platform_device msm_bt_sco_mic_device = { |
| .name = "msm_snddev_ecodec", |
| .dev = { .platform_data = &snddev_bt_sco_mic_data }, |
| }; |
| |
| static struct adie_codec_action_unit itty_mono_tx_actions[] = |
| TTY_HEADSET_MONO_TX_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry itty_mono_tx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = itty_mono_tx_actions, |
| .action_sz = ARRAY_SIZE(itty_mono_tx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile itty_mono_tx_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = itty_mono_tx_settings, |
| .setting_sz = ARRAY_SIZE(itty_mono_tx_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_itty_mono_tx_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE | SNDDEV_CAP_TTY), |
| .name = "tty_headset_mono_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &itty_mono_tx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| }; |
| |
| static struct platform_device msm_itty_mono_tx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_itty_mono_tx_data }, |
| }; |
| |
| static struct adie_codec_action_unit itty_mono_rx_actions[] = |
| TTY_HEADSET_MONO_RX_8000_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry itty_mono_rx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = itty_mono_rx_actions, |
| .action_sz = ARRAY_SIZE(itty_mono_rx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile itty_mono_rx_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = itty_mono_rx_settings, |
| .setting_sz = ARRAY_SIZE(itty_mono_rx_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_itty_mono_rx_data = { |
| .capability = (SNDDEV_CAP_RX | SNDDEV_CAP_VOICE | SNDDEV_CAP_TTY), |
| .name = "tty_headset_mono_rx", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &itty_mono_rx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .voltage_on = msm_snddev_voltage_on, |
| .voltage_off = msm_snddev_voltage_off, |
| }; |
| |
| static struct platform_device msm_itty_mono_rx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_itty_mono_rx_data }, |
| }; |
| |
| static struct adie_codec_action_unit linein_pri_actions[] = |
| LINEIN_PRI_STEREO_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry linein_pri_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = linein_pri_actions, |
| .action_sz = ARRAY_SIZE(linein_pri_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile linein_pri_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = linein_pri_settings, |
| .setting_sz = ARRAY_SIZE(linein_pri_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_linein_pri_data = { |
| .capability = SNDDEV_CAP_TX, |
| .name = "linein_pri_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &linein_pri_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .voltage_on = msm_snddev_voltage_on, |
| .voltage_off = msm_snddev_voltage_off, |
| }; |
| |
| static struct platform_device msm_linein_pri_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_linein_pri_data }, |
| }; |
| |
| static struct adie_codec_action_unit auxpga_lp_lo_actions[] = |
| LB_AUXPGA_LO_STEREO; |
| |
| static struct adie_codec_hwsetting_entry auxpga_lp_lo_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = auxpga_lp_lo_actions, |
| .action_sz = ARRAY_SIZE(auxpga_lp_lo_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile auxpga_lp_lo_profile = { |
| .path_type = ADIE_CODEC_LB, |
| .settings = auxpga_lp_lo_settings, |
| .setting_sz = ARRAY_SIZE(auxpga_lp_lo_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_auxpga_lp_lo_data = { |
| .capability = SNDDEV_CAP_LB, |
| .name = "speaker_stereo_lb", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &auxpga_lp_lo_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_poweramp_on, |
| .pamp_off = msm_snddev_poweramp_off, |
| .dev_vol_type = SNDDEV_DEV_VOL_ANALOG, |
| }; |
| |
| static struct platform_device msm_auxpga_lp_lo_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_auxpga_lp_lo_data }, |
| }; |
| |
| static struct adie_codec_action_unit auxpga_lp_hs_actions[] = |
| LB_AUXPGA_HPH_AB_CPLS_STEREO; |
| |
| static struct adie_codec_hwsetting_entry auxpga_lp_hs_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = auxpga_lp_hs_actions, |
| .action_sz = ARRAY_SIZE(auxpga_lp_hs_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile auxpga_lp_hs_profile = { |
| .path_type = ADIE_CODEC_LB, |
| .settings = auxpga_lp_hs_settings, |
| .setting_sz = ARRAY_SIZE(auxpga_lp_hs_settings), |
| }; |
| |
| static struct snddev_icodec_data snddev_auxpga_lp_hs_data = { |
| .capability = SNDDEV_CAP_LB, |
| .name = "hs_stereo_lb", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &auxpga_lp_hs_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .voltage_on = msm_snddev_voltage_on, |
| .voltage_off = msm_snddev_voltage_off, |
| .dev_vol_type = SNDDEV_DEV_VOL_ANALOG, |
| }; |
| |
| static struct platform_device msm_auxpga_lp_hs_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &snddev_auxpga_lp_hs_data }, |
| }; |
| |
| #ifdef CONFIG_MSM8X60_FTM_AUDIO_DEVICES |
| static struct adie_codec_action_unit ftm_headset_mono_rx_actions[] = |
| HPH_PRI_AB_CPLS_MONO; |
| |
| static struct adie_codec_hwsetting_entry ftm_headset_mono_rx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_headset_mono_rx_actions, |
| .action_sz = ARRAY_SIZE(ftm_headset_mono_rx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_headset_mono_rx_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ftm_headset_mono_rx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_headset_mono_rx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_headset_mono_rx_data = { |
| .capability = SNDDEV_CAP_RX, |
| .name = "ftm_headset_mono_rx", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &ftm_headset_mono_rx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .voltage_on = msm_snddev_voltage_on, |
| .voltage_off = msm_snddev_voltage_off, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_headset_mono_rx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_headset_mono_rx_data}, |
| }; |
| |
| static struct adie_codec_action_unit ftm_headset_mono_diff_rx_actions[] = |
| HEADSET_MONO_DIFF_RX; |
| |
| static struct adie_codec_hwsetting_entry ftm_headset_mono_diff_rx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_headset_mono_diff_rx_actions, |
| .action_sz = ARRAY_SIZE(ftm_headset_mono_diff_rx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_headset_mono_diff_rx_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ftm_headset_mono_diff_rx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_headset_mono_diff_rx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_headset_mono_diff_rx_data = { |
| .capability = SNDDEV_CAP_RX, |
| .name = "ftm_headset_mono_diff_rx", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &ftm_headset_mono_diff_rx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .voltage_on = msm_snddev_voltage_on, |
| .voltage_off = msm_snddev_voltage_off, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_headset_mono_diff_rx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_headset_mono_diff_rx_data}, |
| }; |
| |
| static struct adie_codec_action_unit ftm_spkr_mono_rx_actions[] = |
| SPEAKER_PRI_STEREO_48000_OSR_256; |
| |
| static struct adie_codec_hwsetting_entry ftm_spkr_mono_rx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_spkr_mono_rx_actions, |
| .action_sz = ARRAY_SIZE(ftm_spkr_mono_rx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_spkr_mono_rx_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ftm_spkr_mono_rx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_spkr_mono_rx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_spkr_mono_rx_data = { |
| .capability = SNDDEV_CAP_RX, |
| .name = "ftm_spkr_mono_rx", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &ftm_spkr_mono_rx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_poweramp_on, |
| .pamp_off = msm_snddev_poweramp_off, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_spkr_mono_rx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_spkr_mono_rx_data}, |
| }; |
| |
| static struct adie_codec_action_unit ftm_spkr_l_rx_actions[] = |
| FTM_SPKR_L_RX; |
| |
| static struct adie_codec_hwsetting_entry ftm_spkr_l_rx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_spkr_l_rx_actions, |
| .action_sz = ARRAY_SIZE(ftm_spkr_l_rx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_spkr_l_rx_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ftm_spkr_l_rx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_spkr_l_rx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_spkr_l_rx_data = { |
| .capability = SNDDEV_CAP_RX, |
| .name = "ftm_spkr_l_rx", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &ftm_spkr_l_rx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_poweramp_on, |
| .pamp_off = msm_snddev_poweramp_off, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_spkr_l_rx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_spkr_l_rx_data}, |
| }; |
| |
| static struct adie_codec_action_unit ftm_spkr_r_rx_actions[] = |
| SPKR_R_RX; |
| |
| static struct adie_codec_hwsetting_entry ftm_spkr_r_rx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_spkr_r_rx_actions, |
| .action_sz = ARRAY_SIZE(ftm_spkr_r_rx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_spkr_r_rx_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ftm_spkr_r_rx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_spkr_r_rx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_spkr_r_rx_data = { |
| .capability = SNDDEV_CAP_RX, |
| .name = "ftm_spkr_r_rx", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &ftm_spkr_r_rx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_poweramp_on, |
| .pamp_off = msm_snddev_poweramp_off, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_spkr_r_rx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_spkr_r_rx_data}, |
| }; |
| |
| static struct adie_codec_action_unit ftm_spkr_mono_diff_rx_actions[] = |
| SPKR_MONO_DIFF_RX; |
| |
| static struct adie_codec_hwsetting_entry ftm_spkr_mono_diff_rx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_spkr_mono_diff_rx_actions, |
| .action_sz = ARRAY_SIZE(ftm_spkr_mono_diff_rx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_spkr_mono_diff_rx_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ftm_spkr_mono_diff_rx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_spkr_mono_diff_rx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_spkr_mono_diff_rx_data = { |
| .capability = SNDDEV_CAP_RX, |
| .name = "ftm_spkr_mono_diff_rx", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &ftm_spkr_mono_diff_rx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_poweramp_on, |
| .pamp_off = msm_snddev_poweramp_off, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_spkr_mono_diff_rx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_spkr_mono_diff_rx_data}, |
| }; |
| |
| static struct adie_codec_action_unit ftm_headset_mono_l_rx_actions[] = |
| HPH_PRI_AB_CPLS_MONO_LEFT; |
| |
| static struct adie_codec_hwsetting_entry ftm_headset_mono_l_rx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_headset_mono_l_rx_actions, |
| .action_sz = ARRAY_SIZE(ftm_headset_mono_l_rx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_headset_mono_l_rx_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ftm_headset_mono_l_rx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_headset_mono_l_rx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_headset_mono_l_rx_data = { |
| .capability = SNDDEV_CAP_RX, |
| .name = "ftm_headset_mono_l_rx", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &ftm_headset_mono_l_rx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .voltage_on = msm_snddev_voltage_on, |
| .voltage_off = msm_snddev_voltage_off, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_headset_mono_l_rx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_headset_mono_l_rx_data}, |
| }; |
| |
| static struct adie_codec_action_unit ftm_headset_mono_r_rx_actions[] = |
| HPH_PRI_AB_CPLS_MONO_RIGHT; |
| |
| static struct adie_codec_hwsetting_entry ftm_headset_mono_r_rx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_headset_mono_r_rx_actions, |
| .action_sz = ARRAY_SIZE(ftm_headset_mono_r_rx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_headset_mono_r_rx_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ftm_headset_mono_r_rx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_headset_mono_r_rx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_headset_mono_r_rx_data = { |
| .capability = SNDDEV_CAP_RX, |
| .name = "ftm_headset_mono_r_rx", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &ftm_headset_mono_r_rx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .voltage_on = msm_snddev_voltage_on, |
| .voltage_off = msm_snddev_voltage_off, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_headset_mono_r_rx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_headset_mono_r_rx_data}, |
| }; |
| |
| static struct adie_codec_action_unit ftm_linein_l_tx_actions[] = |
| LINEIN_MONO_L_TX; |
| |
| static struct adie_codec_hwsetting_entry ftm_linein_l_tx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_linein_l_tx_actions, |
| .action_sz = ARRAY_SIZE(ftm_linein_l_tx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_linein_l_tx_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = ftm_linein_l_tx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_linein_l_tx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_linein_l_tx_data = { |
| .capability = SNDDEV_CAP_TX, |
| .name = "ftm_linein_l_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &ftm_linein_l_tx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_linein_l_tx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_linein_l_tx_data }, |
| }; |
| |
| static struct adie_codec_action_unit ftm_linein_r_tx_actions[] = |
| LINEIN_MONO_R_TX; |
| |
| static struct adie_codec_hwsetting_entry ftm_linein_r_tx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_linein_r_tx_actions, |
| .action_sz = ARRAY_SIZE(ftm_linein_r_tx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_linein_r_tx_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = ftm_linein_r_tx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_linein_r_tx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_linein_r_tx_data = { |
| .capability = SNDDEV_CAP_TX, |
| .name = "ftm_linein_r_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &ftm_linein_r_tx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_linein_r_tx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_linein_r_tx_data }, |
| }; |
| |
| static struct adie_codec_action_unit ftm_aux_out_rx_actions[] = |
| AUX_OUT_RX; |
| |
| static struct adie_codec_hwsetting_entry ftm_aux_out_rx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_aux_out_rx_actions, |
| .action_sz = ARRAY_SIZE(ftm_aux_out_rx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_aux_out_rx_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ftm_aux_out_rx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_aux_out_rx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_aux_out_rx_data = { |
| .capability = SNDDEV_CAP_RX, |
| .name = "ftm_aux_out_rx", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &ftm_aux_out_rx_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_aux_out_rx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_aux_out_rx_data}, |
| }; |
| |
| static struct adie_codec_action_unit ftm_dmic1_left_tx_actions[] = |
| DMIC1_LEFT_TX; |
| |
| static struct adie_codec_hwsetting_entry ftm_dmic1_left_tx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_dmic1_left_tx_actions, |
| .action_sz = ARRAY_SIZE(ftm_dmic1_left_tx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_dmic1_left_tx_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = ftm_dmic1_left_tx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_dmic1_left_tx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_dmic1_left_tx_data = { |
| .capability = SNDDEV_CAP_TX, |
| .name = "ftm_dmic1_left_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &ftm_dmic1_left_tx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_dmic_power, |
| .pamp_off = msm_snddev_disable_dmic_power, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_dmic1_left_tx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_dmic1_left_tx_data}, |
| }; |
| |
| static struct adie_codec_action_unit ftm_dmic1_right_tx_actions[] = |
| DMIC1_RIGHT_TX; |
| |
| static struct adie_codec_hwsetting_entry ftm_dmic1_right_tx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_dmic1_right_tx_actions, |
| .action_sz = ARRAY_SIZE(ftm_dmic1_right_tx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_dmic1_right_tx_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = ftm_dmic1_right_tx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_dmic1_right_tx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_dmic1_right_tx_data = { |
| .capability = SNDDEV_CAP_TX, |
| .name = "ftm_dmic1_right_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &ftm_dmic1_right_tx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_dmic_power, |
| .pamp_off = msm_snddev_disable_dmic_power, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_dmic1_right_tx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_dmic1_right_tx_data}, |
| }; |
| |
| static struct adie_codec_action_unit ftm_dmic1_l_and_r_tx_actions[] = |
| DMIC1_LEFT_AND_RIGHT_TX; |
| |
| static struct adie_codec_hwsetting_entry ftm_dmic1_l_and_r_tx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_dmic1_l_and_r_tx_actions, |
| .action_sz = ARRAY_SIZE(ftm_dmic1_l_and_r_tx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_dmic1_l_and_r_tx_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = ftm_dmic1_l_and_r_tx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_dmic1_l_and_r_tx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_dmic1_l_and_r_tx_data = { |
| .capability = SNDDEV_CAP_TX, |
| .name = "ftm_dmic1_l_and_r_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &ftm_dmic1_l_and_r_tx_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_dmic_power, |
| .pamp_off = msm_snddev_disable_dmic_power, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_dmic1_l_and_r_tx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_dmic1_l_and_r_tx_data}, |
| }; |
| |
| static struct adie_codec_action_unit ftm_dmic2_left_tx_actions[] = |
| DMIC2_LEFT_TX; |
| |
| static struct adie_codec_hwsetting_entry ftm_dmic2_left_tx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_dmic2_left_tx_actions, |
| .action_sz = ARRAY_SIZE(ftm_dmic2_left_tx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_dmic2_left_tx_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = ftm_dmic2_left_tx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_dmic2_left_tx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_dmic2_left_tx_data = { |
| .capability = SNDDEV_CAP_TX, |
| .name = "ftm_dmic2_left_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &ftm_dmic2_left_tx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_dmic_power, |
| .pamp_off = msm_snddev_disable_dmic_power, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_dmic2_left_tx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_dmic2_left_tx_data }, |
| }; |
| |
| static struct adie_codec_action_unit ftm_dmic2_right_tx_actions[] = |
| DMIC2_RIGHT_TX; |
| |
| static struct adie_codec_hwsetting_entry ftm_dmic2_right_tx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_dmic2_right_tx_actions, |
| .action_sz = ARRAY_SIZE(ftm_dmic2_right_tx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_dmic2_right_tx_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = ftm_dmic2_right_tx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_dmic2_right_tx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_dmic2_right_tx_data = { |
| .capability = SNDDEV_CAP_TX, |
| .name = "ftm_dmic2_right_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &ftm_dmic2_right_tx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_dmic_power, |
| .pamp_off = msm_snddev_disable_dmic_power, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_dmic2_right_tx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_dmic2_right_tx_data }, |
| }; |
| |
| static struct adie_codec_action_unit ftm_dmic2_l_and_r_tx_actions[] = |
| DMIC2_LEFT_AND_RIGHT_TX; |
| |
| static struct adie_codec_hwsetting_entry ftm_dmic2_l_and_r_tx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_dmic2_l_and_r_tx_actions, |
| .action_sz = ARRAY_SIZE(ftm_dmic2_l_and_r_tx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_dmic2_l_and_r_tx_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = ftm_dmic2_l_and_r_tx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_dmic2_l_and_r_tx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_dmic2_l_and_r_tx_data = { |
| .capability = SNDDEV_CAP_TX, |
| .name = "ftm_dmic2_l_and_r_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &ftm_dmic2_l_and_r_tx_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_dmic_power, |
| .pamp_off = msm_snddev_disable_dmic_power, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_dmic2_l_and_r_tx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_dmic2_l_and_r_tx_data}, |
| }; |
| |
| static struct adie_codec_action_unit ftm_handset_mic1_aux_in_actions[] = |
| HANDSET_MIC1_AUX_IN; |
| |
| static struct adie_codec_hwsetting_entry ftm_handset_mic1_aux_in_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_handset_mic1_aux_in_actions, |
| .action_sz = ARRAY_SIZE(ftm_handset_mic1_aux_in_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_handset_mic1_aux_in_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = ftm_handset_mic1_aux_in_settings, |
| .setting_sz = ARRAY_SIZE(ftm_handset_mic1_aux_in_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_handset_mic1_aux_in_data = { |
| .capability = SNDDEV_CAP_TX, |
| .name = "ftm_handset_mic1_aux_in", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &ftm_handset_mic1_aux_in_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| /* Assumption is that inputs are not tied to analog mic, so |
| * no need to enable mic bias. |
| */ |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_handset_mic1_aux_in_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_handset_mic1_aux_in_data}, |
| }; |
| |
| static struct snddev_mi2s_data snddev_mi2s_sd0_rx_data = { |
| .capability = SNDDEV_CAP_RX , |
| .name = "mi2s_sd0_rx", |
| .copp_id = MI2S_RX, |
| .channel_mode = 2, /* stereo */ |
| .sd_lines = MI2S_SD0, /* sd0 */ |
| .sample_rate = 48000, |
| }; |
| |
| static struct platform_device ftm_mi2s_sd0_rx_device = { |
| .name = "snddev_mi2s", |
| .dev = { .platform_data = &snddev_mi2s_sd0_rx_data }, |
| }; |
| |
| static struct snddev_mi2s_data snddev_mi2s_sd1_rx_data = { |
| .capability = SNDDEV_CAP_RX , |
| .name = "mi2s_sd1_rx", |
| .copp_id = MI2S_RX, |
| .channel_mode = 2, /* stereo */ |
| .sd_lines = MI2S_SD1, /* sd1 */ |
| .sample_rate = 48000, |
| }; |
| |
| static struct platform_device ftm_mi2s_sd1_rx_device = { |
| .name = "snddev_mi2s", |
| .dev = { .platform_data = &snddev_mi2s_sd1_rx_data }, |
| }; |
| |
| static struct snddev_mi2s_data snddev_mi2s_sd2_rx_data = { |
| .capability = SNDDEV_CAP_RX , |
| .name = "mi2s_sd2_rx", |
| .copp_id = MI2S_RX, |
| .channel_mode = 2, /* stereo */ |
| .sd_lines = MI2S_SD2, /* sd2 */ |
| .sample_rate = 48000, |
| }; |
| |
| static struct platform_device ftm_mi2s_sd2_rx_device = { |
| .name = "snddev_mi2s", |
| .dev = { .platform_data = &snddev_mi2s_sd2_rx_data }, |
| }; |
| |
| /* earpiece */ |
| static struct adie_codec_action_unit ftm_handset_adie_lp_rx_actions[] = |
| EAR_PRI_MONO_LB; |
| |
| static struct adie_codec_hwsetting_entry ftm_handset_adie_lp_rx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_handset_adie_lp_rx_actions, |
| .action_sz = ARRAY_SIZE(ftm_handset_adie_lp_rx_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile ftm_handset_adie_lp_rx_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ftm_handset_adie_lp_rx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_handset_adie_lp_rx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_handset_adie_lp_rx_data = { |
| .capability = (SNDDEV_CAP_RX | SNDDEV_CAP_VOICE), |
| .name = "ftm_handset_adie_lp_rx", |
| .copp_id = 0, |
| .profile = &ftm_handset_adie_lp_rx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_handset_adie_lp_rx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_handset_adie_lp_rx_data }, |
| }; |
| |
| static struct adie_codec_action_unit ftm_headset_l_adie_lp_rx_actions[] = |
| FTM_HPH_PRI_AB_CPLS_MONO_LB_LEFT; |
| |
| static struct adie_codec_hwsetting_entry ftm_headset_l_adie_lp_rx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_headset_l_adie_lp_rx_actions, |
| .action_sz = ARRAY_SIZE(ftm_headset_l_adie_lp_rx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_headset_l_adie_lp_rx_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ftm_headset_l_adie_lp_rx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_headset_l_adie_lp_rx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_headset_l_adie_lp_rx_data = { |
| .capability = SNDDEV_CAP_RX, |
| .name = "ftm_headset_l_adie_lp_rx", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &ftm_headset_l_adie_lp_rx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .voltage_on = msm_snddev_voltage_on, |
| .voltage_off = msm_snddev_voltage_off, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_headset_l_adie_lp_rx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_headset_l_adie_lp_rx_data }, |
| }; |
| |
| static struct adie_codec_action_unit ftm_headset_r_adie_lp_rx_actions[] = |
| FTM_HPH_PRI_AB_CPLS_MONO_LB_RIGHT; |
| |
| static struct adie_codec_hwsetting_entry ftm_headset_r_adie_lp_rx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_headset_r_adie_lp_rx_actions, |
| .action_sz = ARRAY_SIZE(ftm_headset_r_adie_lp_rx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_headset_r_adie_lp_rx_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ftm_headset_r_adie_lp_rx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_headset_r_adie_lp_rx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_headset_r_adie_lp_rx_data = { |
| .capability = SNDDEV_CAP_RX, |
| .name = "ftm_headset_r_adie_lp_rx", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &ftm_headset_r_adie_lp_rx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .voltage_on = msm_snddev_voltage_on, |
| .voltage_off = msm_snddev_voltage_off, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_headset_r_adie_lp_rx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_headset_r_adie_lp_rx_data }, |
| }; |
| |
| static struct adie_codec_action_unit ftm_spkr_l_rx_lp_actions[] = |
| FTM_SPKR_L_RX; |
| |
| static struct adie_codec_hwsetting_entry ftm_spkr_l_rx_lp_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_spkr_l_rx_lp_actions, |
| .action_sz = ARRAY_SIZE(ftm_spkr_l_rx_lp_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_spkr_l_rx_lp_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ftm_spkr_l_rx_lp_settings, |
| .setting_sz = ARRAY_SIZE(ftm_spkr_l_rx_lp_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_spkr_l_rx_lp_data = { |
| .capability = SNDDEV_CAP_RX, |
| .name = "ftm_spk_l_adie_lp_rx", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &ftm_spkr_l_rx_lp_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_poweramp_on, |
| .pamp_off = msm_snddev_poweramp_off, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_spk_l_adie_lp_rx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_spkr_l_rx_lp_data}, |
| }; |
| |
| static struct adie_codec_action_unit ftm_spkr_r_adie_lp_rx_actions[] = |
| SPKR_R_RX; |
| |
| static struct adie_codec_hwsetting_entry ftm_spkr_r_adie_lp_rx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_spkr_r_adie_lp_rx_actions, |
| .action_sz = ARRAY_SIZE(ftm_spkr_r_adie_lp_rx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_spkr_r_adie_lp_rx_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ftm_spkr_r_adie_lp_rx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_spkr_r_adie_lp_rx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_spkr_r_adie_lp_rx_data = { |
| .capability = SNDDEV_CAP_RX, |
| .name = "ftm_spk_r_adie_lp_rx", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &ftm_spkr_r_adie_lp_rx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_poweramp_on, |
| .pamp_off = msm_snddev_poweramp_off, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_spk_r_adie_lp_rx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_spkr_r_adie_lp_rx_data}, |
| }; |
| |
| static struct adie_codec_action_unit ftm_spkr_adie_lp_rx_actions[] = |
| FTM_SPKR_RX_LB; |
| |
| static struct adie_codec_hwsetting_entry ftm_spkr_adie_lp_rx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_spkr_adie_lp_rx_actions, |
| .action_sz = ARRAY_SIZE(ftm_spkr_adie_lp_rx_actions), |
| }, |
| }; |
| |
| static struct adie_codec_dev_profile ftm_spkr_adie_lp_rx_profile = { |
| .path_type = ADIE_CODEC_RX, |
| .settings = ftm_spkr_adie_lp_rx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_spkr_adie_lp_rx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_spkr_adie_lp_rx_data = { |
| .capability = SNDDEV_CAP_RX, |
| .name = "ftm_spk_adie_lp_rx", |
| .copp_id = PRIMARY_I2S_RX, |
| .profile = &ftm_spkr_adie_lp_rx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_poweramp_on, |
| .pamp_off = msm_snddev_poweramp_off, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_spk_adie_lp_rx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_spkr_adie_lp_rx_data}, |
| }; |
| |
| static struct adie_codec_action_unit ftm_handset_dual_tx_lp_actions[] = |
| FTM_AMIC_DUAL_HANDSET_TX_LB; |
| |
| static struct adie_codec_hwsetting_entry ftm_handset_dual_tx_lp_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_handset_dual_tx_lp_actions, |
| .action_sz = ARRAY_SIZE(ftm_handset_dual_tx_lp_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile ftm_handset_dual_tx_lp_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = ftm_handset_dual_tx_lp_settings, |
| .setting_sz = ARRAY_SIZE(ftm_handset_dual_tx_lp_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_handset_dual_tx_lp_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "handset_mic1_handset_mic2", |
| .copp_id = 1, |
| .profile = &ftm_handset_dual_tx_lp_profile, |
| .channel_mode = 2, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_amic_power, |
| .pamp_off = msm_snddev_disable_amic_power, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_handset_dual_tx_lp_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_handset_dual_tx_lp_data }, |
| }; |
| |
| static struct adie_codec_action_unit ftm_handset_mic_adie_lp_tx_actions[] = |
| FTM_HANDSET_LB_TX; |
| |
| static struct adie_codec_hwsetting_entry |
| ftm_handset_mic_adie_lp_tx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_handset_mic_adie_lp_tx_actions, |
| .action_sz = ARRAY_SIZE(ftm_handset_mic_adie_lp_tx_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile ftm_handset_mic_adie_lp_tx_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = ftm_handset_mic_adie_lp_tx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_handset_mic_adie_lp_tx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_handset_mic_adie_lp_tx_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "ftm_handset_mic_adie_lp_tx", |
| .copp_id = 1, |
| .profile = &ftm_handset_mic_adie_lp_tx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .pamp_on = msm_snddev_enable_amic_power, |
| .pamp_off = msm_snddev_disable_amic_power, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_handset_mic_adie_lp_tx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_handset_mic_adie_lp_tx_data }, |
| }; |
| |
| static struct adie_codec_action_unit ftm_headset_mic_adie_lp_tx_actions[] = |
| FTM_HEADSET_LB_TX; |
| |
| static struct adie_codec_hwsetting_entry |
| ftm_headset_mic_adie_lp_tx_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = ftm_headset_mic_adie_lp_tx_actions, |
| .action_sz = ARRAY_SIZE(ftm_headset_mic_adie_lp_tx_actions), |
| } |
| }; |
| |
| static struct adie_codec_dev_profile ftm_headset_mic_adie_lp_tx_profile = { |
| .path_type = ADIE_CODEC_TX, |
| .settings = ftm_headset_mic_adie_lp_tx_settings, |
| .setting_sz = ARRAY_SIZE(ftm_headset_mic_adie_lp_tx_settings), |
| }; |
| |
| static struct snddev_icodec_data ftm_headset_mic_adie_lp_tx_data = { |
| .capability = (SNDDEV_CAP_TX | SNDDEV_CAP_VOICE), |
| .name = "ftm_headset_mic_adie_lp_tx", |
| .copp_id = PRIMARY_I2S_TX, |
| .profile = &ftm_headset_mic_adie_lp_tx_profile, |
| .channel_mode = 1, |
| .default_sample_rate = 48000, |
| .dev_vol_type = SNDDEV_DEV_VOL_DIGITAL, |
| }; |
| |
| static struct platform_device ftm_headset_mic_adie_lp_tx_device = { |
| .name = "snddev_icodec", |
| .dev = { .platform_data = &ftm_headset_mic_adie_lp_tx_data }, |
| }; |
| #endif /* CONFIG_MSM8X60_FTM_AUDIO_DEVICES */ |
| |
| static struct snddev_virtual_data snddev_uplink_rx_data = { |
| .capability = SNDDEV_CAP_RX, |
| .name = "uplink_rx", |
| .copp_id = VOICE_PLAYBACK_TX, |
| }; |
| |
| static struct platform_device msm_uplink_rx_device = { |
| .name = "snddev_virtual", |
| .dev = { .platform_data = &snddev_uplink_rx_data }, |
| }; |
| |
| static struct snddev_hdmi_data snddev_hdmi_non_linear_pcm_rx_data = { |
| .capability = SNDDEV_CAP_RX , |
| .name = "hdmi_pass_through", |
| .default_sample_rate = 48000, |
| .on_apps = 1, |
| }; |
| |
| static struct platform_device msm_snddev_hdmi_non_linear_pcm_rx_device = { |
| .name = "snddev_hdmi", |
| .dev = { .platform_data = &snddev_hdmi_non_linear_pcm_rx_data }, |
| }; |
| |
| |
| #ifdef CONFIG_DEBUG_FS |
| static struct adie_codec_action_unit |
| ihs_stereo_rx_class_d_legacy_48KHz_osr256_actions[] = |
| HPH_PRI_D_LEG_STEREO; |
| |
| static struct adie_codec_hwsetting_entry |
| ihs_stereo_rx_class_d_legacy_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = |
| ihs_stereo_rx_class_d_legacy_48KHz_osr256_actions, |
| .action_sz = ARRAY_SIZE |
| (ihs_stereo_rx_class_d_legacy_48KHz_osr256_actions), |
| } |
| }; |
| |
| static struct adie_codec_action_unit |
| ihs_stereo_rx_class_ab_legacy_48KHz_osr256_actions[] = |
| HPH_PRI_AB_LEG_STEREO; |
| |
| static struct adie_codec_hwsetting_entry |
| ihs_stereo_rx_class_ab_legacy_settings[] = { |
| { |
| .freq_plan = 48000, |
| .osr = 256, |
| .actions = |
| ihs_stereo_rx_class_ab_legacy_48KHz_osr256_actions, |
| .action_sz = ARRAY_SIZE |
| (ihs_stereo_rx_class_ab_legacy_48KHz_osr256_actions), |
| } |
| }; |
| |
| static void snddev_hsed_config_modify_setting(int type) |
| { |
| struct platform_device *device; |
| struct snddev_icodec_data *icodec_data; |
| |
| device = &msm_headset_stereo_device; |
| icodec_data = (struct snddev_icodec_data *)device->dev.platform_data; |
| |
| if (icodec_data) { |
| if (type == 1) { |
| icodec_data->voltage_on = NULL; |
| icodec_data->voltage_off = NULL; |
| icodec_data->profile->settings = |
| ihs_stereo_rx_class_d_legacy_settings; |
| icodec_data->profile->setting_sz = |
| ARRAY_SIZE(ihs_stereo_rx_class_d_legacy_settings); |
| } else if (type == 2) { |
| icodec_data->voltage_on = NULL; |
| icodec_data->voltage_off = NULL; |
| icodec_data->profile->settings = |
| ihs_stereo_rx_class_ab_legacy_settings; |
| icodec_data->profile->setting_sz = |
| ARRAY_SIZE(ihs_stereo_rx_class_ab_legacy_settings); |
| } |
| } |
| } |
| |
| static void snddev_hsed_config_restore_setting(void) |
| { |
| struct platform_device *device; |
| struct snddev_icodec_data *icodec_data; |
| |
| device = &msm_headset_stereo_device; |
| icodec_data = (struct snddev_icodec_data *)device->dev.platform_data; |
| |
| if (icodec_data) { |
| icodec_data->voltage_on = msm_snddev_voltage_on; |
| icodec_data->voltage_off = msm_snddev_voltage_off; |
| icodec_data->profile->settings = headset_ab_cpls_settings; |
| icodec_data->profile->setting_sz = |
| ARRAY_SIZE(headset_ab_cpls_settings); |
| } |
| } |
| |
| static ssize_t snddev_hsed_config_debug_write(struct file *filp, |
| const char __user *ubuf, size_t cnt, loff_t *ppos) |
| { |
| char *lb_str = filp->private_data; |
| char cmd; |
| |
| if (get_user(cmd, ubuf)) |
| return -EFAULT; |
| |
| if (!strcmp(lb_str, "msm_hsed_config")) { |
| switch (cmd) { |
| case '0': |
| snddev_hsed_config_restore_setting(); |
| break; |
| |
| case '1': |
| snddev_hsed_config_modify_setting(1); |
| break; |
| |
| case '2': |
| snddev_hsed_config_modify_setting(2); |
| break; |
| |
| default: |
| break; |
| } |
| } |
| return cnt; |
| } |
| |
| static int snddev_hsed_config_debug_open(struct inode *inode, struct file *file) |
| { |
| file->private_data = inode->i_private; |
| return 0; |
| } |
| |
| static const struct file_operations snddev_hsed_config_debug_fops = { |
| .open = snddev_hsed_config_debug_open, |
| .write = snddev_hsed_config_debug_write |
| }; |
| #endif |
| |
| static struct platform_device *snd_devices_ffa[] __initdata = { |
| &msm_iearpiece_ffa_device, |
| &msm_imic_ffa_device, |
| &msm_ispkr_stereo_device, |
| &msm_snddev_hdmi_stereo_rx_device, |
| &msm_headset_mic_device, |
| &msm_ispkr_mic_device, |
| &msm_bt_sco_earpiece_device, |
| &msm_bt_sco_mic_device, |
| &msm_headset_stereo_device, |
| &msm_itty_mono_tx_device, |
| &msm_itty_mono_rx_device, |
| &msm_mi2s_fm_tx_device, |
| &msm_mi2s_fm_rx_device, |
| &msm_hs_dual_mic_endfire_device, |
| &msm_spkr_dual_mic_endfire_device, |
| &msm_hs_dual_mic_broadside_device, |
| &msm_spkr_dual_mic_broadside_device, |
| &msm_ihs_stereo_speaker_stereo_rx_device, |
| &msm_anc_headset_device, |
| &msm_auxpga_lp_hs_device, |
| &msm_auxpga_lp_lo_device, |
| &msm_linein_pri_device, |
| &msm_icodec_gpio_device, |
| &msm_snddev_hdmi_non_linear_pcm_rx_device, |
| }; |
| |
| static struct platform_device *snd_devices_surf[] __initdata = { |
| &msm_iearpiece_device, |
| &msm_imic_device, |
| &msm_ispkr_stereo_device, |
| &msm_snddev_hdmi_stereo_rx_device, |
| &msm_headset_mic_device, |
| &msm_ispkr_mic_device, |
| &msm_bt_sco_earpiece_device, |
| &msm_bt_sco_mic_device, |
| &msm_headset_stereo_device, |
| &msm_itty_mono_tx_device, |
| &msm_itty_mono_rx_device, |
| &msm_mi2s_fm_tx_device, |
| &msm_mi2s_fm_rx_device, |
| &msm_ihs_stereo_speaker_stereo_rx_device, |
| &msm_auxpga_lp_hs_device, |
| &msm_auxpga_lp_lo_device, |
| &msm_linein_pri_device, |
| &msm_icodec_gpio_device, |
| &msm_snddev_hdmi_non_linear_pcm_rx_device, |
| }; |
| |
| static struct platform_device *snd_devices_fluid[] __initdata = { |
| &msm_iearpiece_device, |
| &msm_imic_device, |
| &msm_ispkr_stereo_device, |
| &msm_snddev_hdmi_stereo_rx_device, |
| &msm_headset_stereo_device, |
| &msm_headset_mic_device, |
| &msm_fluid_ispkr_mic_device, |
| &msm_bt_sco_earpiece_device, |
| &msm_bt_sco_mic_device, |
| &msm_mi2s_fm_tx_device, |
| &msm_mi2s_fm_rx_device, |
| &msm_fluid_hs_dual_mic_endfire_device, |
| &msm_fluid_spkr_dual_mic_endfire_device, |
| &msm_fluid_hs_dual_mic_broadside_device, |
| &msm_fluid_spkr_dual_mic_broadside_device, |
| &msm_anc_headset_device, |
| &msm_auxpga_lp_hs_device, |
| &msm_auxpga_lp_lo_device, |
| &msm_icodec_gpio_device, |
| &msm_snddev_hdmi_non_linear_pcm_rx_device, |
| }; |
| |
| static struct platform_device *snd_devices_common[] __initdata = { |
| &msm_aux_pcm_device, |
| &msm_cdcclk_ctl_device, |
| &msm_mi2s_device, |
| &msm_uplink_rx_device, |
| &msm_device_dspcrashd_8x60, |
| }; |
| |
| #ifdef CONFIG_MSM8X60_FTM_AUDIO_DEVICES |
| static struct platform_device *snd_devices_ftm[] __initdata = { |
| &ftm_headset_mono_rx_device, |
| &ftm_headset_mono_l_rx_device, |
| &ftm_headset_mono_r_rx_device, |
| &ftm_headset_mono_diff_rx_device, |
| &ftm_spkr_mono_rx_device, |
| &ftm_spkr_l_rx_device, |
| &ftm_spkr_r_rx_device, |
| &ftm_spkr_mono_diff_rx_device, |
| &ftm_linein_l_tx_device, |
| &ftm_linein_r_tx_device, |
| &ftm_aux_out_rx_device, |
| &ftm_dmic1_left_tx_device, |
| &ftm_dmic1_right_tx_device, |
| &ftm_dmic1_l_and_r_tx_device, |
| &ftm_dmic2_left_tx_device, |
| &ftm_dmic2_right_tx_device, |
| &ftm_dmic2_l_and_r_tx_device, |
| &ftm_handset_mic1_aux_in_device, |
| &ftm_mi2s_sd0_rx_device, |
| &ftm_mi2s_sd1_rx_device, |
| &ftm_mi2s_sd2_rx_device, |
| &ftm_handset_mic_adie_lp_tx_device, |
| &ftm_headset_mic_adie_lp_tx_device, |
| &ftm_handset_adie_lp_rx_device, |
| &ftm_headset_l_adie_lp_rx_device, |
| &ftm_headset_r_adie_lp_rx_device, |
| &ftm_spk_l_adie_lp_rx_device, |
| &ftm_spk_r_adie_lp_rx_device, |
| &ftm_spk_adie_lp_rx_device, |
| &ftm_handset_dual_tx_lp_device, |
| }; |
| #else |
| static struct platform_device *snd_devices_ftm[] __initdata = {}; |
| #endif |
| |
| |
| void __init msm_snddev_init(void) |
| { |
| int i; |
| int dev_id; |
| |
| atomic_set(&pamp_ref_cnt, 0); |
| atomic_set(&preg_ref_cnt, 0); |
| |
| for (i = 0, dev_id = 0; i < ARRAY_SIZE(snd_devices_common); i++) |
| snd_devices_common[i]->id = dev_id++; |
| |
| platform_add_devices(snd_devices_common, |
| ARRAY_SIZE(snd_devices_common)); |
| |
| /* Auto detect device base on machine info */ |
| if (machine_is_msm8x60_surf() || machine_is_msm8x60_fusion()) { |
| for (i = 0; i < ARRAY_SIZE(snd_devices_surf); i++) |
| snd_devices_surf[i]->id = dev_id++; |
| |
| platform_add_devices(snd_devices_surf, |
| ARRAY_SIZE(snd_devices_surf)); |
| } else if (machine_is_msm8x60_ffa() || |
| machine_is_msm8x60_fusn_ffa()) { |
| for (i = 0; i < ARRAY_SIZE(snd_devices_ffa); i++) |
| snd_devices_ffa[i]->id = dev_id++; |
| |
| platform_add_devices(snd_devices_ffa, |
| ARRAY_SIZE(snd_devices_ffa)); |
| } else if (machine_is_msm8x60_fluid()) { |
| for (i = 0; i < ARRAY_SIZE(snd_devices_fluid); i++) |
| snd_devices_fluid[i]->id = dev_id++; |
| |
| platform_add_devices(snd_devices_fluid, |
| ARRAY_SIZE(snd_devices_fluid)); |
| } |
| if (machine_is_msm8x60_surf() || machine_is_msm8x60_ffa() |
| || machine_is_msm8x60_fusion() |
| || machine_is_msm8x60_fusn_ffa()) { |
| for (i = 0; i < ARRAY_SIZE(snd_devices_ftm); i++) |
| snd_devices_ftm[i]->id = dev_id++; |
| |
| platform_add_devices(snd_devices_ftm, |
| ARRAY_SIZE(snd_devices_ftm)); |
| } |
| |
| #ifdef CONFIG_DEBUG_FS |
| debugfs_hsed_config = debugfs_create_file("msm_hsed_config", |
| S_IFREG | S_IRUGO, NULL, |
| (void *) "msm_hsed_config", &snddev_hsed_config_debug_fops); |
| #endif |
| } |