Merge remote-tracking branch 'asoc/topic/arizona' into asoc-next
This commit is contained in:
Коммит
9912b30f95
|
@ -0,0 +1,62 @@
|
|||
Wolfson Arizona class audio SoCs
|
||||
|
||||
These devices are audio SoCs with extensive digital capabilites and a range
|
||||
of analogue I/O.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : one of the following chip-specific strings:
|
||||
"wlf,wm5102"
|
||||
"wlf,wm5110"
|
||||
- reg : I2C slave address when connected using I2C, chip select number when
|
||||
using SPI.
|
||||
|
||||
- interrupts : The interrupt line the /IRQ signal for the device is
|
||||
connected to.
|
||||
- interrupt-controller : Arizona class devices contain interrupt controllers
|
||||
and may provide interrupt services to other devices.
|
||||
- interrupt-parent : The parent interrupt controller.
|
||||
- #interrupt-cells: the number of cells to describe an IRQ, this should be 2.
|
||||
The first cell is the IRQ number.
|
||||
The second cell is the flags, encoded as the trigger masks from
|
||||
Documentation/devicetree/bindings/interrupts.txt
|
||||
|
||||
- gpio-controller : Indicates this device is a GPIO controller.
|
||||
- #gpio-cells : Must be 2. The first cell is the pin number and the
|
||||
second cell is used to specify optional parameters (currently unused).
|
||||
|
||||
- AVDD1-supply, DBVDD1-supply, DBVDD2-supply, DBVDD3-supply, CPVDD-supply,
|
||||
SPKVDDL-supply, SPKVDDR-supply : power supplies for the device, as covered
|
||||
in Documentation/devicetree/bindings/regulator/regulator.txt
|
||||
|
||||
Optional properties:
|
||||
|
||||
- wlf,reset : GPIO specifier for the GPIO controlling /RESET
|
||||
- wlf,ldoena : GPIO specifier for the GPIO controlling LDOENA
|
||||
|
||||
- wlf,gpio-defaults : A list of GPIO configuration register values. If
|
||||
absent, no configuration of these registers is performed. If any
|
||||
entry has a value that is out of range for a 16 bit register then
|
||||
the chip default will be used. If present exactly five values must
|
||||
be specified.
|
||||
|
||||
Example:
|
||||
|
||||
codec: wm5102@1a {
|
||||
compatible = "wlf,wm5102";
|
||||
reg = <0x1a>;
|
||||
interrupts = <347>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-parent = <&gic>;
|
||||
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
|
||||
wlf,gpio-defaults = <
|
||||
0x00000000, /* AIF1TXLRCLK */
|
||||
0xffffffff,
|
||||
0xffffffff,
|
||||
0xffffffff,
|
||||
0xffffffff,
|
||||
>;
|
||||
};
|
|
@ -16,9 +16,13 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/mfd/core.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include <linux/mfd/arizona/core.h>
|
||||
|
@ -344,6 +348,17 @@ static int arizona_runtime_resume(struct device *dev)
|
|||
|
||||
switch (arizona->type) {
|
||||
case WM5102:
|
||||
if (arizona->external_dcvdd) {
|
||||
ret = regmap_update_bits(arizona->regmap,
|
||||
ARIZONA_ISOLATION_CONTROL,
|
||||
ARIZONA_ISOLATE_DCVDD1, 0);
|
||||
if (ret != 0) {
|
||||
dev_err(arizona->dev,
|
||||
"Failed to connect DCVDD: %d\n", ret);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
ret = wm5102_patch(arizona);
|
||||
if (ret != 0) {
|
||||
dev_err(arizona->dev, "Failed to apply patch: %d\n",
|
||||
|
@ -365,6 +380,28 @@ static int arizona_runtime_resume(struct device *dev)
|
|||
goto err;
|
||||
}
|
||||
|
||||
if (arizona->external_dcvdd) {
|
||||
ret = regmap_update_bits(arizona->regmap,
|
||||
ARIZONA_ISOLATION_CONTROL,
|
||||
ARIZONA_ISOLATE_DCVDD1, 0);
|
||||
if (ret != 0) {
|
||||
dev_err(arizona->dev,
|
||||
"Failed to connect DCVDD: %d\n", ret);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
switch (arizona->type) {
|
||||
case WM5102:
|
||||
ret = wm5102_patch(arizona);
|
||||
if (ret != 0) {
|
||||
dev_err(arizona->dev, "Failed to apply patch: %d\n",
|
||||
ret);
|
||||
goto err;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -385,9 +422,22 @@ err:
|
|||
static int arizona_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct arizona *arizona = dev_get_drvdata(dev);
|
||||
int ret;
|
||||
|
||||
dev_dbg(arizona->dev, "Entering AoD mode\n");
|
||||
|
||||
if (arizona->external_dcvdd) {
|
||||
ret = regmap_update_bits(arizona->regmap,
|
||||
ARIZONA_ISOLATION_CONTROL,
|
||||
ARIZONA_ISOLATE_DCVDD1,
|
||||
ARIZONA_ISOLATE_DCVDD1);
|
||||
if (ret != 0) {
|
||||
dev_err(arizona->dev, "Failed to isolate DCVDD: %d\n",
|
||||
ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
regulator_disable(arizona->dcvdd);
|
||||
regcache_cache_only(arizona->regmap, true);
|
||||
regcache_mark_dirty(arizona->regmap);
|
||||
|
@ -397,6 +447,26 @@ static int arizona_runtime_suspend(struct device *dev)
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int arizona_suspend(struct device *dev)
|
||||
{
|
||||
struct arizona *arizona = dev_get_drvdata(dev);
|
||||
|
||||
dev_dbg(arizona->dev, "Suspend, disabling IRQ\n");
|
||||
disable_irq(arizona->irq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int arizona_suspend_late(struct device *dev)
|
||||
{
|
||||
struct arizona *arizona = dev_get_drvdata(dev);
|
||||
|
||||
dev_dbg(arizona->dev, "Late suspend, reenabling IRQ\n");
|
||||
enable_irq(arizona->irq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int arizona_resume_noirq(struct device *dev)
|
||||
{
|
||||
struct arizona *arizona = dev_get_drvdata(dev);
|
||||
|
@ -422,13 +492,78 @@ const struct dev_pm_ops arizona_pm_ops = {
|
|||
SET_RUNTIME_PM_OPS(arizona_runtime_suspend,
|
||||
arizona_runtime_resume,
|
||||
NULL)
|
||||
SET_SYSTEM_SLEEP_PM_OPS(NULL, arizona_resume)
|
||||
SET_SYSTEM_SLEEP_PM_OPS(arizona_suspend, arizona_resume)
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
.suspend_late = arizona_suspend_late,
|
||||
.resume_noirq = arizona_resume_noirq,
|
||||
#endif
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(arizona_pm_ops);
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
int arizona_of_get_type(struct device *dev)
|
||||
{
|
||||
const struct of_device_id *id = of_match_device(arizona_of_match, dev);
|
||||
|
||||
if (id)
|
||||
return (int)id->data;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(arizona_of_get_type);
|
||||
|
||||
static int arizona_of_get_core_pdata(struct arizona *arizona)
|
||||
{
|
||||
int ret, i;
|
||||
|
||||
arizona->pdata.reset = of_get_named_gpio(arizona->dev->of_node,
|
||||
"wlf,reset", 0);
|
||||
if (arizona->pdata.reset < 0)
|
||||
arizona->pdata.reset = 0;
|
||||
|
||||
arizona->pdata.ldoena = of_get_named_gpio(arizona->dev->of_node,
|
||||
"wlf,ldoena", 0);
|
||||
if (arizona->pdata.ldoena < 0)
|
||||
arizona->pdata.ldoena = 0;
|
||||
|
||||
ret = of_property_read_u32_array(arizona->dev->of_node,
|
||||
"wlf,gpio-defaults",
|
||||
arizona->pdata.gpio_defaults,
|
||||
ARRAY_SIZE(arizona->pdata.gpio_defaults));
|
||||
if (ret >= 0) {
|
||||
/*
|
||||
* All values are literal except out of range values
|
||||
* which are chip default, translate into platform
|
||||
* data which uses 0 as chip default and out of range
|
||||
* as zero.
|
||||
*/
|
||||
for (i = 0; i < ARRAY_SIZE(arizona->pdata.gpio_defaults); i++) {
|
||||
if (arizona->pdata.gpio_defaults[i] > 0xffff)
|
||||
arizona->pdata.gpio_defaults[i] = 0;
|
||||
if (arizona->pdata.gpio_defaults[i] == 0)
|
||||
arizona->pdata.gpio_defaults[i] = 0x10000;
|
||||
}
|
||||
} else {
|
||||
dev_err(arizona->dev, "Failed to parse GPIO defaults: %d\n",
|
||||
ret);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const struct of_device_id arizona_of_match[] = {
|
||||
{ .compatible = "wlf,wm5102", .data = (void *)WM5102 },
|
||||
{ .compatible = "wlf,wm5110", .data = (void *)WM5110 },
|
||||
{},
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(arizona_of_match);
|
||||
#else
|
||||
static inline int arizona_of_get_core_pdata(struct arizona *arizona)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static struct mfd_cell early_devs[] = {
|
||||
{ .name = "arizona-ldo1" },
|
||||
};
|
||||
|
@ -462,6 +597,8 @@ int arizona_dev_init(struct arizona *arizona)
|
|||
dev_set_drvdata(arizona->dev, arizona);
|
||||
mutex_init(&arizona->clk_lock);
|
||||
|
||||
arizona_of_get_core_pdata(arizona);
|
||||
|
||||
if (dev_get_platdata(arizona->dev))
|
||||
memcpy(&arizona->pdata, dev_get_platdata(arizona->dev),
|
||||
sizeof(arizona->pdata));
|
||||
|
@ -536,6 +673,63 @@ int arizona_dev_init(struct arizona *arizona)
|
|||
|
||||
regcache_cache_only(arizona->regmap, false);
|
||||
|
||||
/* Verify that this is a chip we know about */
|
||||
ret = regmap_read(arizona->regmap, ARIZONA_SOFTWARE_RESET, ®);
|
||||
if (ret != 0) {
|
||||
dev_err(dev, "Failed to read ID register: %d\n", ret);
|
||||
goto err_reset;
|
||||
}
|
||||
|
||||
switch (reg) {
|
||||
case 0x5102:
|
||||
case 0x5110:
|
||||
break;
|
||||
default:
|
||||
dev_err(arizona->dev, "Unknown device ID: %x\n", reg);
|
||||
goto err_reset;
|
||||
}
|
||||
|
||||
/* If we have a /RESET GPIO we'll already be reset */
|
||||
if (!arizona->pdata.reset) {
|
||||
regcache_mark_dirty(arizona->regmap);
|
||||
|
||||
ret = regmap_write(arizona->regmap, ARIZONA_SOFTWARE_RESET, 0);
|
||||
if (ret != 0) {
|
||||
dev_err(dev, "Failed to reset device: %d\n", ret);
|
||||
goto err_reset;
|
||||
}
|
||||
|
||||
msleep(1);
|
||||
|
||||
ret = regcache_sync(arizona->regmap);
|
||||
if (ret != 0) {
|
||||
dev_err(dev, "Failed to sync device: %d\n", ret);
|
||||
goto err_reset;
|
||||
}
|
||||
}
|
||||
|
||||
/* Ensure device startup is complete */
|
||||
switch (arizona->type) {
|
||||
case WM5102:
|
||||
ret = regmap_read(arizona->regmap, 0x19, &val);
|
||||
if (ret != 0)
|
||||
dev_err(dev,
|
||||
"Failed to check write sequencer state: %d\n",
|
||||
ret);
|
||||
else if (val & 0x01)
|
||||
break;
|
||||
/* Fall through */
|
||||
default:
|
||||
ret = arizona_wait_for_boot(arizona);
|
||||
if (ret != 0) {
|
||||
dev_err(arizona->dev,
|
||||
"Device failed initial boot: %d\n", ret);
|
||||
goto err_reset;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* Read the device ID information & do device specific stuff */
|
||||
ret = regmap_read(arizona->regmap, ARIZONA_SOFTWARE_RESET, ®);
|
||||
if (ret != 0) {
|
||||
dev_err(dev, "Failed to read ID register: %d\n", ret);
|
||||
|
@ -581,45 +775,6 @@ int arizona_dev_init(struct arizona *arizona)
|
|||
|
||||
dev_info(dev, "%s revision %c\n", type_name, arizona->rev + 'A');
|
||||
|
||||
/* If we have a /RESET GPIO we'll already be reset */
|
||||
if (!arizona->pdata.reset) {
|
||||
regcache_mark_dirty(arizona->regmap);
|
||||
|
||||
ret = regmap_write(arizona->regmap, ARIZONA_SOFTWARE_RESET, 0);
|
||||
if (ret != 0) {
|
||||
dev_err(dev, "Failed to reset device: %d\n", ret);
|
||||
goto err_reset;
|
||||
}
|
||||
|
||||
msleep(1);
|
||||
|
||||
ret = regcache_sync(arizona->regmap);
|
||||
if (ret != 0) {
|
||||
dev_err(dev, "Failed to sync device: %d\n", ret);
|
||||
goto err_reset;
|
||||
}
|
||||
}
|
||||
|
||||
switch (arizona->type) {
|
||||
case WM5102:
|
||||
ret = regmap_read(arizona->regmap, 0x19, &val);
|
||||
if (ret != 0)
|
||||
dev_err(dev,
|
||||
"Failed to check write sequencer state: %d\n",
|
||||
ret);
|
||||
else if (val & 0x01)
|
||||
break;
|
||||
/* Fall through */
|
||||
default:
|
||||
ret = arizona_wait_for_boot(arizona);
|
||||
if (ret != 0) {
|
||||
dev_err(arizona->dev,
|
||||
"Device failed initial boot: %d\n", ret);
|
||||
goto err_reset;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (apply_patch) {
|
||||
ret = apply_patch(arizona);
|
||||
if (ret != 0) {
|
||||
|
@ -651,6 +806,14 @@ int arizona_dev_init(struct arizona *arizona)
|
|||
arizona->pdata.gpio_defaults[i]);
|
||||
}
|
||||
|
||||
/*
|
||||
* LDO1 can only be used to supply DCVDD so if it has no
|
||||
* consumers then DCVDD is supplied externally.
|
||||
*/
|
||||
if (arizona->pdata.ldo1 &&
|
||||
arizona->pdata.ldo1->num_consumer_supplies == 0)
|
||||
arizona->external_dcvdd = true;
|
||||
|
||||
pm_runtime_set_autosuspend_delay(arizona->dev, 100);
|
||||
pm_runtime_use_autosuspend(arizona->dev);
|
||||
pm_runtime_enable(arizona->dev);
|
||||
|
@ -697,7 +860,7 @@ int arizona_dev_init(struct arizona *arizona)
|
|||
if (arizona->pdata.micbias[i].discharge)
|
||||
val |= ARIZONA_MICB1_DISCH;
|
||||
|
||||
if (arizona->pdata.micbias[i].fast_start)
|
||||
if (arizona->pdata.micbias[i].soft_start)
|
||||
val |= ARIZONA_MICB1_RATE;
|
||||
|
||||
if (arizona->pdata.micbias[i].bypass)
|
||||
|
@ -809,6 +972,11 @@ int arizona_dev_exit(struct arizona *arizona)
|
|||
arizona_free_irq(arizona, ARIZONA_IRQ_CLKGEN_ERR, arizona);
|
||||
pm_runtime_disable(arizona->dev);
|
||||
arizona_irq_exit(arizona);
|
||||
if (arizona->pdata.reset)
|
||||
gpio_set_value_cansleep(arizona->pdata.reset, 0);
|
||||
regulator_disable(arizona->dcvdd);
|
||||
regulator_bulk_disable(ARRAY_SIZE(arizona->core_supplies),
|
||||
arizona->core_supplies);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(arizona_dev_exit);
|
||||
|
|
|
@ -27,9 +27,14 @@ static int arizona_i2c_probe(struct i2c_client *i2c,
|
|||
{
|
||||
struct arizona *arizona;
|
||||
const struct regmap_config *regmap_config;
|
||||
int ret;
|
||||
int ret, type;
|
||||
|
||||
switch (id->driver_data) {
|
||||
if (i2c->dev.of_node)
|
||||
type = arizona_of_get_type(&i2c->dev);
|
||||
else
|
||||
type = id->driver_data;
|
||||
|
||||
switch (type) {
|
||||
#ifdef CONFIG_MFD_WM5102
|
||||
case WM5102:
|
||||
regmap_config = &wm5102_i2c_regmap;
|
||||
|
@ -84,6 +89,7 @@ static struct i2c_driver arizona_i2c_driver = {
|
|||
.name = "arizona",
|
||||
.owner = THIS_MODULE,
|
||||
.pm = &arizona_pm_ops,
|
||||
.of_match_table = of_match_ptr(arizona_of_match),
|
||||
},
|
||||
.probe = arizona_i2c_probe,
|
||||
.remove = arizona_i2c_remove,
|
||||
|
|
|
@ -27,9 +27,14 @@ static int arizona_spi_probe(struct spi_device *spi)
|
|||
const struct spi_device_id *id = spi_get_device_id(spi);
|
||||
struct arizona *arizona;
|
||||
const struct regmap_config *regmap_config;
|
||||
int ret;
|
||||
int ret, type;
|
||||
|
||||
switch (id->driver_data) {
|
||||
if (spi->dev.of_node)
|
||||
type = arizona_of_get_type(&spi->dev);
|
||||
else
|
||||
type = id->driver_data;
|
||||
|
||||
switch (type) {
|
||||
#ifdef CONFIG_MFD_WM5102
|
||||
case WM5102:
|
||||
regmap_config = &wm5102_spi_regmap;
|
||||
|
@ -84,6 +89,7 @@ static struct spi_driver arizona_spi_driver = {
|
|||
.name = "arizona",
|
||||
.owner = THIS_MODULE,
|
||||
.pm = &arizona_pm_ops,
|
||||
.of_match_table = of_match_ptr(arizona_of_match),
|
||||
},
|
||||
.probe = arizona_spi_probe,
|
||||
.remove = arizona_spi_remove,
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#ifndef _WM5102_H
|
||||
#define _WM5102_H
|
||||
|
||||
#include <linux/of.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/pm.h>
|
||||
|
||||
|
@ -26,6 +27,8 @@ extern const struct regmap_config wm5110_spi_regmap;
|
|||
|
||||
extern const struct dev_pm_ops arizona_pm_ops;
|
||||
|
||||
extern const struct of_device_id arizona_of_match[];
|
||||
|
||||
extern const struct regmap_irq_chip wm5102_aod;
|
||||
extern const struct regmap_irq_chip wm5102_irq;
|
||||
|
||||
|
@ -37,4 +40,13 @@ int arizona_dev_exit(struct arizona *arizona);
|
|||
int arizona_irq_init(struct arizona *arizona);
|
||||
int arizona_irq_exit(struct arizona *arizona);
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
int arizona_of_get_type(struct device *dev);
|
||||
#else
|
||||
static inline int arizona_of_get_type(struct device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -65,7 +65,8 @@ static const struct reg_default wm5102_revb_patch[] = {
|
|||
{ 0x418, 0xa080 },
|
||||
{ 0x420, 0xa080 },
|
||||
{ 0x428, 0xe000 },
|
||||
{ 0x443, 0xDC1A },
|
||||
{ 0x442, 0x3F0A },
|
||||
{ 0x443, 0xDC1F },
|
||||
{ 0x4B0, 0x0066 },
|
||||
{ 0x458, 0x000b },
|
||||
{ 0x212, 0x0000 },
|
||||
|
@ -424,6 +425,9 @@ static const struct reg_default wm5102_reg_default[] = {
|
|||
{ 0x00000435, 0x0180 }, /* R1077 - DAC Digital Volume 5R */
|
||||
{ 0x00000436, 0x0081 }, /* R1078 - DAC Volume Limit 5R */
|
||||
{ 0x00000437, 0x0200 }, /* R1079 - Noise Gate Select 5R */
|
||||
{ 0x00000440, 0x8FFF }, /* R1088 - DRE Enable */
|
||||
{ 0x00000442, 0x3F0A }, /* R1090 - DRE Control 2 */
|
||||
{ 0x00000443, 0xDC1F }, /* R1090 - DRE Control 3 */
|
||||
{ 0x00000450, 0x0000 }, /* R1104 - DAC AEC Control 1 */
|
||||
{ 0x00000458, 0x000B }, /* R1112 - Noise Gate Control */
|
||||
{ 0x00000490, 0x0069 }, /* R1168 - PDM SPK1 CTRL 1 */
|
||||
|
@ -1197,6 +1201,9 @@ static bool wm5102_readable_register(struct device *dev, unsigned int reg)
|
|||
case ARIZONA_DAC_DIGITAL_VOLUME_5R:
|
||||
case ARIZONA_DAC_VOLUME_LIMIT_5R:
|
||||
case ARIZONA_NOISE_GATE_SELECT_5R:
|
||||
case ARIZONA_DRE_ENABLE:
|
||||
case ARIZONA_DRE_CONTROL_2:
|
||||
case ARIZONA_DRE_CONTROL_3:
|
||||
case ARIZONA_DAC_AEC_CONTROL_1:
|
||||
case ARIZONA_NOISE_GATE_CONTROL:
|
||||
case ARIZONA_PDM_SPK1_CTRL_1:
|
||||
|
|
|
@ -2273,18 +2273,22 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)
|
|||
case ARIZONA_DSP1_CLOCKING_1:
|
||||
case ARIZONA_DSP1_STATUS_1:
|
||||
case ARIZONA_DSP1_STATUS_2:
|
||||
case ARIZONA_DSP1_STATUS_3:
|
||||
case ARIZONA_DSP2_CONTROL_1:
|
||||
case ARIZONA_DSP2_CLOCKING_1:
|
||||
case ARIZONA_DSP2_STATUS_1:
|
||||
case ARIZONA_DSP2_STATUS_2:
|
||||
case ARIZONA_DSP2_STATUS_3:
|
||||
case ARIZONA_DSP3_CONTROL_1:
|
||||
case ARIZONA_DSP3_CLOCKING_1:
|
||||
case ARIZONA_DSP3_STATUS_1:
|
||||
case ARIZONA_DSP3_STATUS_2:
|
||||
case ARIZONA_DSP3_STATUS_3:
|
||||
case ARIZONA_DSP4_CONTROL_1:
|
||||
case ARIZONA_DSP4_CLOCKING_1:
|
||||
case ARIZONA_DSP4_STATUS_1:
|
||||
case ARIZONA_DSP4_STATUS_2:
|
||||
case ARIZONA_DSP4_STATUS_3:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
|
@ -2334,12 +2338,16 @@ static bool wm5110_volatile_register(struct device *dev, unsigned int reg)
|
|||
case ARIZONA_DSP1_CLOCKING_1:
|
||||
case ARIZONA_DSP1_STATUS_1:
|
||||
case ARIZONA_DSP1_STATUS_2:
|
||||
case ARIZONA_DSP1_STATUS_3:
|
||||
case ARIZONA_DSP2_STATUS_1:
|
||||
case ARIZONA_DSP2_STATUS_2:
|
||||
case ARIZONA_DSP2_STATUS_3:
|
||||
case ARIZONA_DSP3_STATUS_1:
|
||||
case ARIZONA_DSP3_STATUS_2:
|
||||
case ARIZONA_DSP3_STATUS_3:
|
||||
case ARIZONA_DSP4_STATUS_1:
|
||||
case ARIZONA_DSP4_STATUS_2:
|
||||
case ARIZONA_DSP4_STATUS_3:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
|
|
|
@ -95,6 +95,8 @@ struct arizona {
|
|||
|
||||
struct arizona_pdata pdata;
|
||||
|
||||
unsigned int external_dcvdd:1;
|
||||
|
||||
int irq;
|
||||
struct irq_domain *virq;
|
||||
struct regmap_irq_chip_data *aod_irq_chip;
|
||||
|
|
|
@ -77,7 +77,7 @@ struct arizona_micbias {
|
|||
int mV; /** Regulated voltage */
|
||||
unsigned int ext_cap:1; /** External capacitor fitted */
|
||||
unsigned int discharge:1; /** Actively discharge */
|
||||
unsigned int fast_start:1; /** Enable aggressive startup ramp rate */
|
||||
unsigned int soft_start:1; /** Disable aggressive startup ramp rate */
|
||||
unsigned int bypass:1; /** Use bypass mode */
|
||||
};
|
||||
|
||||
|
|
|
@ -215,6 +215,9 @@
|
|||
#define ARIZONA_DAC_DIGITAL_VOLUME_6R 0x43D
|
||||
#define ARIZONA_DAC_VOLUME_LIMIT_6R 0x43E
|
||||
#define ARIZONA_NOISE_GATE_SELECT_6R 0x43F
|
||||
#define ARIZONA_DRE_ENABLE 0x440
|
||||
#define ARIZONA_DRE_CONTROL_2 0x442
|
||||
#define ARIZONA_DRE_CONTROL_3 0x443
|
||||
#define ARIZONA_DAC_AEC_CONTROL_1 0x450
|
||||
#define ARIZONA_NOISE_GATE_CONTROL 0x458
|
||||
#define ARIZONA_PDM_SPK1_CTRL_1 0x490
|
||||
|
@ -1002,6 +1005,7 @@
|
|||
#define ARIZONA_DSP2_CLOCKING_1 0x1201
|
||||
#define ARIZONA_DSP2_STATUS_1 0x1204
|
||||
#define ARIZONA_DSP2_STATUS_2 0x1205
|
||||
#define ARIZONA_DSP2_STATUS_3 0x1206
|
||||
#define ARIZONA_DSP2_SCRATCH_0 0x1240
|
||||
#define ARIZONA_DSP2_SCRATCH_1 0x1241
|
||||
#define ARIZONA_DSP2_SCRATCH_2 0x1242
|
||||
|
@ -1010,6 +1014,7 @@
|
|||
#define ARIZONA_DSP3_CLOCKING_1 0x1301
|
||||
#define ARIZONA_DSP3_STATUS_1 0x1304
|
||||
#define ARIZONA_DSP3_STATUS_2 0x1305
|
||||
#define ARIZONA_DSP3_STATUS_3 0x1306
|
||||
#define ARIZONA_DSP3_SCRATCH_0 0x1340
|
||||
#define ARIZONA_DSP3_SCRATCH_1 0x1341
|
||||
#define ARIZONA_DSP3_SCRATCH_2 0x1342
|
||||
|
@ -1018,6 +1023,7 @@
|
|||
#define ARIZONA_DSP4_CLOCKING_1 0x1401
|
||||
#define ARIZONA_DSP4_STATUS_1 0x1404
|
||||
#define ARIZONA_DSP4_STATUS_2 0x1405
|
||||
#define ARIZONA_DSP4_STATUS_3 0x1406
|
||||
#define ARIZONA_DSP4_SCRATCH_0 0x1440
|
||||
#define ARIZONA_DSP4_SCRATCH_1 0x1441
|
||||
#define ARIZONA_DSP4_SCRATCH_2 0x1442
|
||||
|
@ -3129,6 +3135,47 @@
|
|||
#define ARIZONA_OUT6R_NGATE_SRC_SHIFT 0 /* OUT6R_NGATE_SRC - [11:0] */
|
||||
#define ARIZONA_OUT6R_NGATE_SRC_WIDTH 12 /* OUT6R_NGATE_SRC - [11:0] */
|
||||
|
||||
/*
|
||||
* R1088 (0x440) - DRE Enable
|
||||
*/
|
||||
#define ARIZONA_DRE3L_ENA 0x0010 /* DRE3L_ENA */
|
||||
#define ARIZONA_DRE3L_ENA_MASK 0x0010 /* DRE3L_ENA */
|
||||
#define ARIZONA_DRE3L_ENA_SHIFT 4 /* DRE3L_ENA */
|
||||
#define ARIZONA_DRE3L_ENA_WIDTH 1 /* DRE3L_ENA */
|
||||
#define ARIZONA_DRE2R_ENA 0x0008 /* DRE2R_ENA */
|
||||
#define ARIZONA_DRE2R_ENA_MASK 0x0008 /* DRE2R_ENA */
|
||||
#define ARIZONA_DRE2R_ENA_SHIFT 3 /* DRE2R_ENA */
|
||||
#define ARIZONA_DRE2R_ENA_WIDTH 1 /* DRE2R_ENA */
|
||||
#define ARIZONA_DRE2L_ENA 0x0004 /* DRE2L_ENA */
|
||||
#define ARIZONA_DRE2L_ENA_MASK 0x0004 /* DRE2L_ENA */
|
||||
#define ARIZONA_DRE2L_ENA_SHIFT 2 /* DRE2L_ENA */
|
||||
#define ARIZONA_DRE2L_ENA_WIDTH 1 /* DRE2L_ENA */
|
||||
#define ARIZONA_DRE1R_ENA 0x0002 /* DRE1R_ENA */
|
||||
#define ARIZONA_DRE1R_ENA_MASK 0x0002 /* DRE1R_ENA */
|
||||
#define ARIZONA_DRE1R_ENA_SHIFT 1 /* DRE1R_ENA */
|
||||
#define ARIZONA_DRE1R_ENA_WIDTH 1 /* DRE1R_ENA */
|
||||
#define ARIZONA_DRE1L_ENA 0x0001 /* DRE1L_ENA */
|
||||
#define ARIZONA_DRE1L_ENA_MASK 0x0001 /* DRE1L_ENA */
|
||||
#define ARIZONA_DRE1L_ENA_SHIFT 0 /* DRE1L_ENA */
|
||||
#define ARIZONA_DRE1L_ENA_WIDTH 1 /* DRE1L_ENA */
|
||||
|
||||
/*
|
||||
* R1090 (0x442) - DRE Control 2
|
||||
*/
|
||||
#define ARIZONA_DRE_T_LOW_MASK 0x3F00 /* DRE_T_LOW - [13:8] */
|
||||
#define ARIZONA_DRE_T_LOW_SHIFT 8 /* DRE_T_LOW - [13:8] */
|
||||
#define ARIZONA_DRE_T_LOW_WIDTH 6 /* DRE_T_LOW - [13:8] */
|
||||
|
||||
/*
|
||||
* R1091 (0x443) - DRE Control 3
|
||||
*/
|
||||
#define ARIZONA_DRE_GAIN_SHIFT_MASK 0xC000 /* DRE_GAIN_SHIFT - [15:14] */
|
||||
#define ARIZONA_DRE_GAIN_SHIFT_SHIFT 14 /* DRE_GAIN_SHIFT - [15:14] */
|
||||
#define ARIZONA_DRE_GAIN_SHIFT_WIDTH 2 /* DRE_GAIN_SHIFT - [15:14] */
|
||||
#define ARIZONA_DRE_LOW_LEVEL_ABS_MASK 0x000F /* LOW_LEVEL_ABS - [3:0] */
|
||||
#define ARIZONA_DRE_LOW_LEVEL_ABS_SHIFT 0 /* LOW_LEVEL_ABS - [3:0] */
|
||||
#define ARIZONA_DRE_LOW_LEVEL_ABS_WIDTH 4 /* LOW_LEVEL_ABS - [3:0] */
|
||||
|
||||
/*
|
||||
* R1104 (0x450) - DAC AEC Control 1
|
||||
*/
|
||||
|
|
|
@ -1198,6 +1198,13 @@ const struct snd_soc_dai_ops arizona_dai_ops = {
|
|||
};
|
||||
EXPORT_SYMBOL_GPL(arizona_dai_ops);
|
||||
|
||||
const struct snd_soc_dai_ops arizona_simple_dai_ops = {
|
||||
.startup = arizona_startup,
|
||||
.hw_params = arizona_hw_params_rate,
|
||||
.set_sysclk = arizona_dai_set_sysclk,
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(arizona_simple_dai_ops);
|
||||
|
||||
int arizona_init_dai(struct arizona_priv *priv, int id)
|
||||
{
|
||||
struct arizona_dai_priv *dai_priv = &priv->dai[id];
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
#define ARIZONA_CLK_98MHZ 5
|
||||
#define ARIZONA_CLK_147MHZ 6
|
||||
|
||||
#define ARIZONA_MAX_DAI 4
|
||||
#define ARIZONA_MAX_DAI 6
|
||||
#define ARIZONA_MAX_ADSP 4
|
||||
|
||||
struct arizona;
|
||||
|
@ -213,6 +213,7 @@ extern int arizona_set_sysclk(struct snd_soc_codec *codec, int clk_id,
|
|||
int source, unsigned int freq, int dir);
|
||||
|
||||
extern const struct snd_soc_dai_ops arizona_dai_ops;
|
||||
extern const struct snd_soc_dai_ops arizona_simple_dai_ops;
|
||||
|
||||
#define ARIZONA_FLL_NAME_LEN 20
|
||||
|
||||
|
|
|
@ -814,7 +814,20 @@ SOC_DOUBLE_R_TLV("SPKDAT1 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_5L,
|
|||
|
||||
SOC_VALUE_ENUM("HPOUT1 OSR", wm5102_hpout_osr[0]),
|
||||
SOC_VALUE_ENUM("HPOUT2 OSR", wm5102_hpout_osr[1]),
|
||||
SOC_VALUE_ENUM("HPOUT3 OSR", wm5102_hpout_osr[2]),
|
||||
SOC_VALUE_ENUM("EPOUT OSR", wm5102_hpout_osr[2]),
|
||||
|
||||
SOC_DOUBLE("HPOUT1 DRE Switch", ARIZONA_DRE_ENABLE,
|
||||
ARIZONA_DRE1L_ENA_SHIFT, ARIZONA_DRE1R_ENA_SHIFT, 1, 0),
|
||||
SOC_DOUBLE("HPOUT2 DRE Switch", ARIZONA_DRE_ENABLE,
|
||||
ARIZONA_DRE2L_ENA_SHIFT, ARIZONA_DRE2R_ENA_SHIFT, 1, 0),
|
||||
SOC_SINGLE("EPOUT DRE Switch", ARIZONA_DRE_ENABLE,
|
||||
ARIZONA_DRE3L_ENA_SHIFT, 1, 0),
|
||||
|
||||
SOC_SINGLE("DRE Threshold", ARIZONA_DRE_CONTROL_2,
|
||||
ARIZONA_DRE_T_LOW_SHIFT, 63, 0),
|
||||
|
||||
SOC_SINGLE("DRE Low Level ABS", ARIZONA_DRE_CONTROL_3,
|
||||
ARIZONA_DRE_LOW_LEVEL_ABS_SHIFT, 15, 0),
|
||||
|
||||
SOC_ENUM("Output Ramp Up", arizona_out_vi_ramp),
|
||||
SOC_ENUM("Output Ramp Down", arizona_out_vd_ramp),
|
||||
|
@ -852,6 +865,15 @@ ARIZONA_MIXER_CONTROLS("AIF2TX2", ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE),
|
|||
|
||||
ARIZONA_MIXER_CONTROLS("AIF3TX1", ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE),
|
||||
ARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE),
|
||||
|
||||
ARIZONA_MIXER_CONTROLS("SLIMTX1", ARIZONA_SLIMTX1MIX_INPUT_1_SOURCE),
|
||||
ARIZONA_MIXER_CONTROLS("SLIMTX2", ARIZONA_SLIMTX2MIX_INPUT_1_SOURCE),
|
||||
ARIZONA_MIXER_CONTROLS("SLIMTX3", ARIZONA_SLIMTX3MIX_INPUT_1_SOURCE),
|
||||
ARIZONA_MIXER_CONTROLS("SLIMTX4", ARIZONA_SLIMTX4MIX_INPUT_1_SOURCE),
|
||||
ARIZONA_MIXER_CONTROLS("SLIMTX5", ARIZONA_SLIMTX5MIX_INPUT_1_SOURCE),
|
||||
ARIZONA_MIXER_CONTROLS("SLIMTX6", ARIZONA_SLIMTX6MIX_INPUT_1_SOURCE),
|
||||
ARIZONA_MIXER_CONTROLS("SLIMTX7", ARIZONA_SLIMTX7MIX_INPUT_1_SOURCE),
|
||||
ARIZONA_MIXER_CONTROLS("SLIMTX8", ARIZONA_SLIMTX8MIX_INPUT_1_SOURCE),
|
||||
};
|
||||
|
||||
ARIZONA_MIXER_ENUMS(EQ1, ARIZONA_EQ1MIX_INPUT_1_SOURCE);
|
||||
|
@ -898,6 +920,15 @@ ARIZONA_MIXER_ENUMS(AIF2TX2, ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE);
|
|||
ARIZONA_MIXER_ENUMS(AIF3TX1, ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MIXER_ENUMS(AIF3TX2, ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE);
|
||||
|
||||
ARIZONA_MIXER_ENUMS(SLIMTX1, ARIZONA_SLIMTX1MIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MIXER_ENUMS(SLIMTX2, ARIZONA_SLIMTX2MIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MIXER_ENUMS(SLIMTX3, ARIZONA_SLIMTX3MIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MIXER_ENUMS(SLIMTX4, ARIZONA_SLIMTX4MIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MIXER_ENUMS(SLIMTX5, ARIZONA_SLIMTX5MIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MIXER_ENUMS(SLIMTX6, ARIZONA_SLIMTX6MIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MIXER_ENUMS(SLIMTX7, ARIZONA_SLIMTX7MIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MIXER_ENUMS(SLIMTX8, ARIZONA_SLIMTX8MIX_INPUT_1_SOURCE);
|
||||
|
||||
ARIZONA_MUX_ENUMS(ASRC1L, ARIZONA_ASRC1LMIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MUX_ENUMS(ASRC1R, ARIZONA_ASRC1RMIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MUX_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE);
|
||||
|
@ -1117,6 +1148,56 @@ SND_SOC_DAPM_AIF_IN("AIF3RX1", NULL, 0,
|
|||
SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 0,
|
||||
ARIZONA_AIF3_RX_ENABLES, ARIZONA_AIF3RX2_ENA_SHIFT, 0),
|
||||
|
||||
SND_SOC_DAPM_AIF_OUT("SLIMTX1", NULL, 0,
|
||||
ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMTX1_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("SLIMTX2", NULL, 0,
|
||||
ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMTX2_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("SLIMTX3", NULL, 0,
|
||||
ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMTX3_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("SLIMTX4", NULL, 0,
|
||||
ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMTX4_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("SLIMTX5", NULL, 0,
|
||||
ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMTX5_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("SLIMTX6", NULL, 0,
|
||||
ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMTX6_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("SLIMTX7", NULL, 0,
|
||||
ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMTX7_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("SLIMTX8", NULL, 0,
|
||||
ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMTX8_ENA_SHIFT, 0),
|
||||
|
||||
SND_SOC_DAPM_AIF_IN("SLIMRX1", NULL, 0,
|
||||
ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMRX1_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SLIMRX2", NULL, 0,
|
||||
ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMRX2_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SLIMRX3", NULL, 0,
|
||||
ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMRX3_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SLIMRX4", NULL, 0,
|
||||
ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMRX4_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SLIMRX5", NULL, 0,
|
||||
ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMRX5_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SLIMRX6", NULL, 0,
|
||||
ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMRX6_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SLIMRX7", NULL, 0,
|
||||
ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMRX7_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SLIMRX8", NULL, 0,
|
||||
ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMRX8_ENA_SHIFT, 0),
|
||||
|
||||
ARIZONA_DSP_WIDGETS(DSP1, "DSP1"),
|
||||
|
||||
SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1,
|
||||
|
@ -1189,6 +1270,15 @@ ARIZONA_MIXER_WIDGETS(AIF2TX2, "AIF2TX2"),
|
|||
ARIZONA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"),
|
||||
ARIZONA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"),
|
||||
|
||||
ARIZONA_MIXER_WIDGETS(SLIMTX1, "SLIMTX1"),
|
||||
ARIZONA_MIXER_WIDGETS(SLIMTX2, "SLIMTX2"),
|
||||
ARIZONA_MIXER_WIDGETS(SLIMTX3, "SLIMTX3"),
|
||||
ARIZONA_MIXER_WIDGETS(SLIMTX4, "SLIMTX4"),
|
||||
ARIZONA_MIXER_WIDGETS(SLIMTX5, "SLIMTX5"),
|
||||
ARIZONA_MIXER_WIDGETS(SLIMTX6, "SLIMTX6"),
|
||||
ARIZONA_MIXER_WIDGETS(SLIMTX7, "SLIMTX7"),
|
||||
ARIZONA_MIXER_WIDGETS(SLIMTX8, "SLIMTX8"),
|
||||
|
||||
ARIZONA_MUX_WIDGETS(ASRC1L, "ASRC1L"),
|
||||
ARIZONA_MUX_WIDGETS(ASRC1R, "ASRC1R"),
|
||||
ARIZONA_MUX_WIDGETS(ASRC2L, "ASRC2L"),
|
||||
|
@ -1249,6 +1339,14 @@ SND_SOC_DAPM_OUTPUT("MICSUPP"),
|
|||
{ name, "AIF2RX2", "AIF2RX2" }, \
|
||||
{ name, "AIF3RX1", "AIF3RX1" }, \
|
||||
{ name, "AIF3RX2", "AIF3RX2" }, \
|
||||
{ name, "SLIMRX1", "SLIMRX1" }, \
|
||||
{ name, "SLIMRX2", "SLIMRX2" }, \
|
||||
{ name, "SLIMRX3", "SLIMRX3" }, \
|
||||
{ name, "SLIMRX4", "SLIMRX4" }, \
|
||||
{ name, "SLIMRX5", "SLIMRX5" }, \
|
||||
{ name, "SLIMRX6", "SLIMRX6" }, \
|
||||
{ name, "SLIMRX7", "SLIMRX7" }, \
|
||||
{ name, "SLIMRX8", "SLIMRX8" }, \
|
||||
{ name, "EQ1", "EQ1" }, \
|
||||
{ name, "EQ2", "EQ2" }, \
|
||||
{ name, "EQ3", "EQ3" }, \
|
||||
|
@ -1304,10 +1402,21 @@ static const struct snd_soc_dapm_route wm5102_dapm_routes[] = {
|
|||
{ "OUT5L", NULL, "SYSCLK" },
|
||||
{ "OUT5R", NULL, "SYSCLK" },
|
||||
|
||||
{ "IN1L", NULL, "SYSCLK" },
|
||||
{ "IN1R", NULL, "SYSCLK" },
|
||||
{ "IN2L", NULL, "SYSCLK" },
|
||||
{ "IN2R", NULL, "SYSCLK" },
|
||||
{ "IN3L", NULL, "SYSCLK" },
|
||||
{ "IN3R", NULL, "SYSCLK" },
|
||||
|
||||
{ "MICBIAS1", NULL, "MICVDD" },
|
||||
{ "MICBIAS2", NULL, "MICVDD" },
|
||||
{ "MICBIAS3", NULL, "MICVDD" },
|
||||
|
||||
{ "Noise Generator", NULL, "SYSCLK" },
|
||||
{ "Tone Generator 1", NULL, "SYSCLK" },
|
||||
{ "Tone Generator 2", NULL, "SYSCLK" },
|
||||
|
||||
{ "Noise Generator", NULL, "NOISE" },
|
||||
{ "Tone Generator 1", NULL, "TONE" },
|
||||
{ "Tone Generator 2", NULL, "TONE" },
|
||||
|
@ -1345,13 +1454,41 @@ static const struct snd_soc_dapm_route wm5102_dapm_routes[] = {
|
|||
{ "AIF3RX1", NULL, "AIF3 Playback" },
|
||||
{ "AIF3RX2", NULL, "AIF3 Playback" },
|
||||
|
||||
{ "Slim1 Capture", NULL, "SLIMTX1" },
|
||||
{ "Slim1 Capture", NULL, "SLIMTX2" },
|
||||
{ "Slim1 Capture", NULL, "SLIMTX3" },
|
||||
{ "Slim1 Capture", NULL, "SLIMTX4" },
|
||||
|
||||
{ "SLIMRX1", NULL, "Slim1 Playback" },
|
||||
{ "SLIMRX2", NULL, "Slim1 Playback" },
|
||||
{ "SLIMRX3", NULL, "Slim1 Playback" },
|
||||
{ "SLIMRX4", NULL, "Slim1 Playback" },
|
||||
|
||||
{ "Slim2 Capture", NULL, "SLIMTX5" },
|
||||
{ "Slim2 Capture", NULL, "SLIMTX6" },
|
||||
|
||||
{ "SLIMRX5", NULL, "Slim2 Playback" },
|
||||
{ "SLIMRX6", NULL, "Slim2 Playback" },
|
||||
|
||||
{ "Slim3 Capture", NULL, "SLIMTX7" },
|
||||
{ "Slim3 Capture", NULL, "SLIMTX8" },
|
||||
|
||||
{ "SLIMRX7", NULL, "Slim3 Playback" },
|
||||
{ "SLIMRX8", NULL, "Slim3 Playback" },
|
||||
|
||||
{ "AIF1 Playback", NULL, "SYSCLK" },
|
||||
{ "AIF2 Playback", NULL, "SYSCLK" },
|
||||
{ "AIF3 Playback", NULL, "SYSCLK" },
|
||||
{ "Slim1 Playback", NULL, "SYSCLK" },
|
||||
{ "Slim2 Playback", NULL, "SYSCLK" },
|
||||
{ "Slim3 Playback", NULL, "SYSCLK" },
|
||||
|
||||
{ "AIF1 Capture", NULL, "SYSCLK" },
|
||||
{ "AIF2 Capture", NULL, "SYSCLK" },
|
||||
{ "AIF3 Capture", NULL, "SYSCLK" },
|
||||
{ "Slim1 Capture", NULL, "SYSCLK" },
|
||||
{ "Slim2 Capture", NULL, "SYSCLK" },
|
||||
{ "Slim3 Capture", NULL, "SYSCLK" },
|
||||
|
||||
{ "IN1L PGA", NULL, "IN1L" },
|
||||
{ "IN1R PGA", NULL, "IN1R" },
|
||||
|
@ -1408,6 +1545,15 @@ static const struct snd_soc_dapm_route wm5102_dapm_routes[] = {
|
|||
ARIZONA_MIXER_ROUTES("AIF3TX1", "AIF3TX1"),
|
||||
ARIZONA_MIXER_ROUTES("AIF3TX2", "AIF3TX2"),
|
||||
|
||||
ARIZONA_MIXER_ROUTES("SLIMTX1", "SLIMTX1"),
|
||||
ARIZONA_MIXER_ROUTES("SLIMTX2", "SLIMTX2"),
|
||||
ARIZONA_MIXER_ROUTES("SLIMTX3", "SLIMTX3"),
|
||||
ARIZONA_MIXER_ROUTES("SLIMTX4", "SLIMTX4"),
|
||||
ARIZONA_MIXER_ROUTES("SLIMTX5", "SLIMTX5"),
|
||||
ARIZONA_MIXER_ROUTES("SLIMTX6", "SLIMTX6"),
|
||||
ARIZONA_MIXER_ROUTES("SLIMTX7", "SLIMTX7"),
|
||||
ARIZONA_MIXER_ROUTES("SLIMTX8", "SLIMTX8"),
|
||||
|
||||
ARIZONA_MIXER_ROUTES("EQ1", "EQ1"),
|
||||
ARIZONA_MIXER_ROUTES("EQ2", "EQ2"),
|
||||
ARIZONA_MIXER_ROUTES("EQ3", "EQ3"),
|
||||
|
@ -1560,6 +1706,63 @@ static struct snd_soc_dai_driver wm5102_dai[] = {
|
|||
.ops = &arizona_dai_ops,
|
||||
.symmetric_rates = 1,
|
||||
},
|
||||
{
|
||||
.name = "wm5102-slim1",
|
||||
.id = 4,
|
||||
.playback = {
|
||||
.stream_name = "Slim1 Playback",
|
||||
.channels_min = 1,
|
||||
.channels_max = 4,
|
||||
.rates = WM5102_RATES,
|
||||
.formats = WM5102_FORMATS,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "Slim1 Capture",
|
||||
.channels_min = 1,
|
||||
.channels_max = 4,
|
||||
.rates = WM5102_RATES,
|
||||
.formats = WM5102_FORMATS,
|
||||
},
|
||||
.ops = &arizona_simple_dai_ops,
|
||||
},
|
||||
{
|
||||
.name = "wm5102-slim2",
|
||||
.id = 5,
|
||||
.playback = {
|
||||
.stream_name = "Slim2 Playback",
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.rates = WM5102_RATES,
|
||||
.formats = WM5102_FORMATS,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "Slim2 Capture",
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.rates = WM5102_RATES,
|
||||
.formats = WM5102_FORMATS,
|
||||
},
|
||||
.ops = &arizona_simple_dai_ops,
|
||||
},
|
||||
{
|
||||
.name = "wm5102-slim3",
|
||||
.id = 6,
|
||||
.playback = {
|
||||
.stream_name = "Slim3 Playback",
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.rates = WM5102_RATES,
|
||||
.formats = WM5102_FORMATS,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "Slim3 Capture",
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.rates = WM5102_RATES,
|
||||
.formats = WM5102_FORMATS,
|
||||
},
|
||||
.ops = &arizona_simple_dai_ops,
|
||||
},
|
||||
};
|
||||
|
||||
static int wm5102_codec_probe(struct snd_soc_codec *codec)
|
||||
|
|
|
@ -309,6 +309,15 @@ ARIZONA_MIXER_CONTROLS("AIF2TX2", ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE),
|
|||
|
||||
ARIZONA_MIXER_CONTROLS("AIF3TX1", ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE),
|
||||
ARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE),
|
||||
|
||||
ARIZONA_MIXER_CONTROLS("SLIMTX1", ARIZONA_SLIMTX1MIX_INPUT_1_SOURCE),
|
||||
ARIZONA_MIXER_CONTROLS("SLIMTX2", ARIZONA_SLIMTX2MIX_INPUT_1_SOURCE),
|
||||
ARIZONA_MIXER_CONTROLS("SLIMTX3", ARIZONA_SLIMTX3MIX_INPUT_1_SOURCE),
|
||||
ARIZONA_MIXER_CONTROLS("SLIMTX4", ARIZONA_SLIMTX4MIX_INPUT_1_SOURCE),
|
||||
ARIZONA_MIXER_CONTROLS("SLIMTX5", ARIZONA_SLIMTX5MIX_INPUT_1_SOURCE),
|
||||
ARIZONA_MIXER_CONTROLS("SLIMTX6", ARIZONA_SLIMTX6MIX_INPUT_1_SOURCE),
|
||||
ARIZONA_MIXER_CONTROLS("SLIMTX7", ARIZONA_SLIMTX7MIX_INPUT_1_SOURCE),
|
||||
ARIZONA_MIXER_CONTROLS("SLIMTX8", ARIZONA_SLIMTX8MIX_INPUT_1_SOURCE),
|
||||
};
|
||||
|
||||
ARIZONA_MIXER_ENUMS(EQ1, ARIZONA_EQ1MIX_INPUT_1_SOURCE);
|
||||
|
@ -360,6 +369,15 @@ ARIZONA_MIXER_ENUMS(AIF2TX2, ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE);
|
|||
ARIZONA_MIXER_ENUMS(AIF3TX1, ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MIXER_ENUMS(AIF3TX2, ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE);
|
||||
|
||||
ARIZONA_MIXER_ENUMS(SLIMTX1, ARIZONA_SLIMTX1MIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MIXER_ENUMS(SLIMTX2, ARIZONA_SLIMTX2MIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MIXER_ENUMS(SLIMTX3, ARIZONA_SLIMTX3MIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MIXER_ENUMS(SLIMTX4, ARIZONA_SLIMTX4MIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MIXER_ENUMS(SLIMTX5, ARIZONA_SLIMTX5MIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MIXER_ENUMS(SLIMTX6, ARIZONA_SLIMTX6MIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MIXER_ENUMS(SLIMTX7, ARIZONA_SLIMTX7MIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MIXER_ENUMS(SLIMTX8, ARIZONA_SLIMTX8MIX_INPUT_1_SOURCE);
|
||||
|
||||
ARIZONA_MUX_ENUMS(ASRC1L, ARIZONA_ASRC1LMIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MUX_ENUMS(ASRC1R, ARIZONA_ASRC1RMIX_INPUT_1_SOURCE);
|
||||
ARIZONA_MUX_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE);
|
||||
|
@ -550,6 +568,56 @@ SND_SOC_DAPM_AIF_IN("AIF2RX1", NULL, 0,
|
|||
SND_SOC_DAPM_AIF_IN("AIF2RX2", NULL, 0,
|
||||
ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX2_ENA_SHIFT, 0),
|
||||
|
||||
SND_SOC_DAPM_AIF_IN("SLIMRX1", NULL, 0,
|
||||
ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMRX1_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SLIMRX2", NULL, 0,
|
||||
ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMRX2_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SLIMRX3", NULL, 0,
|
||||
ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMRX3_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SLIMRX4", NULL, 0,
|
||||
ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMRX4_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SLIMRX5", NULL, 0,
|
||||
ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMRX5_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SLIMRX6", NULL, 0,
|
||||
ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMRX6_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SLIMRX7", NULL, 0,
|
||||
ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMRX7_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_IN("SLIMRX8", NULL, 0,
|
||||
ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMRX8_ENA_SHIFT, 0),
|
||||
|
||||
SND_SOC_DAPM_AIF_OUT("SLIMTX1", NULL, 0,
|
||||
ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMTX1_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("SLIMTX2", NULL, 0,
|
||||
ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMTX2_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("SLIMTX3", NULL, 0,
|
||||
ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMTX3_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("SLIMTX4", NULL, 0,
|
||||
ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMTX4_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("SLIMTX5", NULL, 0,
|
||||
ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMTX5_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("SLIMTX6", NULL, 0,
|
||||
ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMTX6_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("SLIMTX7", NULL, 0,
|
||||
ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMTX7_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("SLIMTX8", NULL, 0,
|
||||
ARIZONA_SLIMBUS_TX_CHANNEL_ENABLE,
|
||||
ARIZONA_SLIMTX8_ENA_SHIFT, 0),
|
||||
|
||||
SND_SOC_DAPM_AIF_OUT("AIF3TX1", NULL, 0,
|
||||
ARIZONA_AIF3_TX_ENABLES, ARIZONA_AIF3TX1_ENA_SHIFT, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("AIF3TX2", NULL, 0,
|
||||
|
@ -640,6 +708,15 @@ ARIZONA_MIXER_WIDGETS(AIF2TX2, "AIF2TX2"),
|
|||
ARIZONA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"),
|
||||
ARIZONA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"),
|
||||
|
||||
ARIZONA_MIXER_WIDGETS(SLIMTX1, "SLIMTX1"),
|
||||
ARIZONA_MIXER_WIDGETS(SLIMTX2, "SLIMTX2"),
|
||||
ARIZONA_MIXER_WIDGETS(SLIMTX3, "SLIMTX3"),
|
||||
ARIZONA_MIXER_WIDGETS(SLIMTX4, "SLIMTX4"),
|
||||
ARIZONA_MIXER_WIDGETS(SLIMTX5, "SLIMTX5"),
|
||||
ARIZONA_MIXER_WIDGETS(SLIMTX6, "SLIMTX6"),
|
||||
ARIZONA_MIXER_WIDGETS(SLIMTX7, "SLIMTX7"),
|
||||
ARIZONA_MIXER_WIDGETS(SLIMTX8, "SLIMTX8"),
|
||||
|
||||
ARIZONA_MUX_WIDGETS(ASRC1L, "ASRC1L"),
|
||||
ARIZONA_MUX_WIDGETS(ASRC1R, "ASRC1R"),
|
||||
ARIZONA_MUX_WIDGETS(ASRC2L, "ASRC2L"),
|
||||
|
@ -690,6 +767,14 @@ SND_SOC_DAPM_OUTPUT("MICSUPP"),
|
|||
{ name, "AIF2RX2", "AIF2RX2" }, \
|
||||
{ name, "AIF3RX1", "AIF3RX1" }, \
|
||||
{ name, "AIF3RX2", "AIF3RX2" }, \
|
||||
{ name, "SLIMRX1", "SLIMRX1" }, \
|
||||
{ name, "SLIMRX2", "SLIMRX2" }, \
|
||||
{ name, "SLIMRX3", "SLIMRX3" }, \
|
||||
{ name, "SLIMRX4", "SLIMRX4" }, \
|
||||
{ name, "SLIMRX5", "SLIMRX5" }, \
|
||||
{ name, "SLIMRX6", "SLIMRX6" }, \
|
||||
{ name, "SLIMRX7", "SLIMRX7" }, \
|
||||
{ name, "SLIMRX8", "SLIMRX8" }, \
|
||||
{ name, "EQ1", "EQ1" }, \
|
||||
{ name, "EQ2", "EQ2" }, \
|
||||
{ name, "EQ3", "EQ3" }, \
|
||||
|
@ -736,10 +821,23 @@ static const struct snd_soc_dapm_route wm5110_dapm_routes[] = {
|
|||
{ "OUT6L", NULL, "SYSCLK" },
|
||||
{ "OUT6R", NULL, "SYSCLK" },
|
||||
|
||||
{ "IN1L", NULL, "SYSCLK" },
|
||||
{ "IN1R", NULL, "SYSCLK" },
|
||||
{ "IN2L", NULL, "SYSCLK" },
|
||||
{ "IN2R", NULL, "SYSCLK" },
|
||||
{ "IN3L", NULL, "SYSCLK" },
|
||||
{ "IN3R", NULL, "SYSCLK" },
|
||||
{ "IN4L", NULL, "SYSCLK" },
|
||||
{ "IN4R", NULL, "SYSCLK" },
|
||||
|
||||
{ "MICBIAS1", NULL, "MICVDD" },
|
||||
{ "MICBIAS2", NULL, "MICVDD" },
|
||||
{ "MICBIAS3", NULL, "MICVDD" },
|
||||
|
||||
{ "Noise Generator", NULL, "SYSCLK" },
|
||||
{ "Tone Generator 1", NULL, "SYSCLK" },
|
||||
{ "Tone Generator 2", NULL, "SYSCLK" },
|
||||
|
||||
{ "Noise Generator", NULL, "NOISE" },
|
||||
{ "Tone Generator 1", NULL, "TONE" },
|
||||
{ "Tone Generator 2", NULL, "TONE" },
|
||||
|
@ -777,13 +875,41 @@ static const struct snd_soc_dapm_route wm5110_dapm_routes[] = {
|
|||
{ "AIF3RX1", NULL, "AIF3 Playback" },
|
||||
{ "AIF3RX2", NULL, "AIF3 Playback" },
|
||||
|
||||
{ "Slim1 Capture", NULL, "SLIMTX1" },
|
||||
{ "Slim1 Capture", NULL, "SLIMTX2" },
|
||||
{ "Slim1 Capture", NULL, "SLIMTX3" },
|
||||
{ "Slim1 Capture", NULL, "SLIMTX4" },
|
||||
|
||||
{ "SLIMRX1", NULL, "Slim1 Playback" },
|
||||
{ "SLIMRX2", NULL, "Slim1 Playback" },
|
||||
{ "SLIMRX3", NULL, "Slim1 Playback" },
|
||||
{ "SLIMRX4", NULL, "Slim1 Playback" },
|
||||
|
||||
{ "Slim2 Capture", NULL, "SLIMTX5" },
|
||||
{ "Slim2 Capture", NULL, "SLIMTX6" },
|
||||
|
||||
{ "SLIMRX5", NULL, "Slim2 Playback" },
|
||||
{ "SLIMRX6", NULL, "Slim2 Playback" },
|
||||
|
||||
{ "Slim3 Capture", NULL, "SLIMTX7" },
|
||||
{ "Slim3 Capture", NULL, "SLIMTX8" },
|
||||
|
||||
{ "SLIMRX7", NULL, "Slim3 Playback" },
|
||||
{ "SLIMRX8", NULL, "Slim3 Playback" },
|
||||
|
||||
{ "AIF1 Playback", NULL, "SYSCLK" },
|
||||
{ "AIF2 Playback", NULL, "SYSCLK" },
|
||||
{ "AIF3 Playback", NULL, "SYSCLK" },
|
||||
{ "Slim1 Playback", NULL, "SYSCLK" },
|
||||
{ "Slim2 Playback", NULL, "SYSCLK" },
|
||||
{ "Slim3 Playback", NULL, "SYSCLK" },
|
||||
|
||||
{ "AIF1 Capture", NULL, "SYSCLK" },
|
||||
{ "AIF2 Capture", NULL, "SYSCLK" },
|
||||
{ "AIF3 Capture", NULL, "SYSCLK" },
|
||||
{ "Slim1 Capture", NULL, "SYSCLK" },
|
||||
{ "Slim2 Capture", NULL, "SYSCLK" },
|
||||
{ "Slim3 Capture", NULL, "SYSCLK" },
|
||||
|
||||
{ "IN1L PGA", NULL, "IN1L" },
|
||||
{ "IN1R PGA", NULL, "IN1R" },
|
||||
|
@ -829,6 +955,15 @@ static const struct snd_soc_dapm_route wm5110_dapm_routes[] = {
|
|||
ARIZONA_MIXER_ROUTES("AIF3TX1", "AIF3TX1"),
|
||||
ARIZONA_MIXER_ROUTES("AIF3TX2", "AIF3TX2"),
|
||||
|
||||
ARIZONA_MIXER_ROUTES("SLIMTX1", "SLIMTX1"),
|
||||
ARIZONA_MIXER_ROUTES("SLIMTX2", "SLIMTX2"),
|
||||
ARIZONA_MIXER_ROUTES("SLIMTX3", "SLIMTX3"),
|
||||
ARIZONA_MIXER_ROUTES("SLIMTX4", "SLIMTX4"),
|
||||
ARIZONA_MIXER_ROUTES("SLIMTX5", "SLIMTX5"),
|
||||
ARIZONA_MIXER_ROUTES("SLIMTX6", "SLIMTX6"),
|
||||
ARIZONA_MIXER_ROUTES("SLIMTX7", "SLIMTX7"),
|
||||
ARIZONA_MIXER_ROUTES("SLIMTX8", "SLIMTX8"),
|
||||
|
||||
ARIZONA_MIXER_ROUTES("EQ1", "EQ1"),
|
||||
ARIZONA_MIXER_ROUTES("EQ2", "EQ2"),
|
||||
ARIZONA_MIXER_ROUTES("EQ3", "EQ3"),
|
||||
|
@ -963,6 +1098,63 @@ static struct snd_soc_dai_driver wm5110_dai[] = {
|
|||
.ops = &arizona_dai_ops,
|
||||
.symmetric_rates = 1,
|
||||
},
|
||||
{
|
||||
.name = "wm5110-slim1",
|
||||
.id = 4,
|
||||
.playback = {
|
||||
.stream_name = "Slim1 Playback",
|
||||
.channels_min = 1,
|
||||
.channels_max = 4,
|
||||
.rates = WM5110_RATES,
|
||||
.formats = WM5110_FORMATS,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "Slim1 Capture",
|
||||
.channels_min = 1,
|
||||
.channels_max = 4,
|
||||
.rates = WM5110_RATES,
|
||||
.formats = WM5110_FORMATS,
|
||||
},
|
||||
.ops = &arizona_simple_dai_ops,
|
||||
},
|
||||
{
|
||||
.name = "wm5110-slim2",
|
||||
.id = 5,
|
||||
.playback = {
|
||||
.stream_name = "Slim2 Playback",
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.rates = WM5110_RATES,
|
||||
.formats = WM5110_FORMATS,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "Slim2 Capture",
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.rates = WM5110_RATES,
|
||||
.formats = WM5110_FORMATS,
|
||||
},
|
||||
.ops = &arizona_simple_dai_ops,
|
||||
},
|
||||
{
|
||||
.name = "wm5110-slim3",
|
||||
.id = 6,
|
||||
.playback = {
|
||||
.stream_name = "Slim3 Playback",
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.rates = WM5110_RATES,
|
||||
.formats = WM5110_FORMATS,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "Slim3 Capture",
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.rates = WM5110_RATES,
|
||||
.formats = WM5110_FORMATS,
|
||||
},
|
||||
.ops = &arizona_simple_dai_ops,
|
||||
},
|
||||
};
|
||||
|
||||
static int wm5110_codec_probe(struct snd_soc_codec *codec)
|
||||
|
|
Загрузка…
Ссылка в новой задаче