Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
9912b30f
Commit
9912b30f
authored
Jun 17, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/arizona' into asoc-next
parents
e768f4e1
7c470373
Changes
14
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
762 additions
and
41 deletions
+762
-41
Documentation/devicetree/bindings/mfd/arizona.txt
Documentation/devicetree/bindings/mfd/arizona.txt
+62
-0
drivers/mfd/arizona-core.c
drivers/mfd/arizona-core.c
+201
-33
drivers/mfd/arizona-i2c.c
drivers/mfd/arizona-i2c.c
+8
-2
drivers/mfd/arizona-spi.c
drivers/mfd/arizona-spi.c
+8
-2
drivers/mfd/arizona.h
drivers/mfd/arizona.h
+12
-0
drivers/mfd/wm5102-tables.c
drivers/mfd/wm5102-tables.c
+8
-1
drivers/mfd/wm5110-tables.c
drivers/mfd/wm5110-tables.c
+8
-0
include/linux/mfd/arizona/core.h
include/linux/mfd/arizona/core.h
+2
-0
include/linux/mfd/arizona/pdata.h
include/linux/mfd/arizona/pdata.h
+1
-1
include/linux/mfd/arizona/registers.h
include/linux/mfd/arizona/registers.h
+47
-0
sound/soc/codecs/arizona.c
sound/soc/codecs/arizona.c
+7
-0
sound/soc/codecs/arizona.h
sound/soc/codecs/arizona.h
+2
-1
sound/soc/codecs/wm5102.c
sound/soc/codecs/wm5102.c
+204
-1
sound/soc/codecs/wm5110.c
sound/soc/codecs/wm5110.c
+192
-0
No files found.
Documentation/devicetree/bindings/mfd/arizona.txt
0 → 100644
View file @
9912b30f
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,
>;
};
drivers/mfd/arizona-core.c
View file @
9912b30f
...
...
@@ -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 @@ static int arizona_runtime_resume(struct device *dev)
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,51 +673,22 @@ 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
,
&
reg
);
if
(
ret
!=
0
)
{
dev_err
(
dev
,
"Failed to read ID register: %d
\n
"
,
ret
);
goto
err_reset
;
}
ret
=
regmap_read
(
arizona
->
regmap
,
ARIZONA_DEVICE_REVISION
,
&
arizona
->
rev
);
if
(
ret
!=
0
)
{
dev_err
(
dev
,
"Failed to read revision register: %d
\n
"
,
ret
);
goto
err_reset
;
}
arizona
->
rev
&=
ARIZONA_DEVICE_REVISION_MASK
;
switch
(
reg
)
{
#ifdef CONFIG_MFD_WM5102
case
0x5102
:
type_name
=
"WM5102"
;
if
(
arizona
->
type
!=
WM5102
)
{
dev_err
(
arizona
->
dev
,
"WM5102 registered as %d
\n
"
,
arizona
->
type
);
arizona
->
type
=
WM5102
;
}
apply_patch
=
wm5102_patch
;
arizona
->
rev
&=
0x7
;
break
;
#endif
#ifdef CONFIG_MFD_WM5110
case
0x5110
:
type_name
=
"WM5110"
;
if
(
arizona
->
type
!=
WM5110
)
{
dev_err
(
arizona
->
dev
,
"WM5110 registered as %d
\n
"
,
arizona
->
type
);
arizona
->
type
=
WM5110
;
}
apply_patch
=
wm5110_patch
;
break
;
#endif
default:
dev_err
(
arizona
->
dev
,
"Unknown device ID %x
\n
"
,
reg
);
dev_err
(
arizona
->
dev
,
"Unknown device ID
:
%x
\n
"
,
reg
);
goto
err_reset
;
}
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
);
...
...
@@ -600,6 +708,7 @@ int arizona_dev_init(struct arizona *arizona)
}
}
/* Ensure device startup is complete */
switch
(
arizona
->
type
)
{
case
WM5102
:
ret
=
regmap_read
(
arizona
->
regmap
,
0x19
,
&
val
);
...
...
@@ -620,6 +729,52 @@ int arizona_dev_init(struct arizona *arizona)
break
;
}
/* Read the device ID information & do device specific stuff */
ret
=
regmap_read
(
arizona
->
regmap
,
ARIZONA_SOFTWARE_RESET
,
&
reg
);
if
(
ret
!=
0
)
{
dev_err
(
dev
,
"Failed to read ID register: %d
\n
"
,
ret
);
goto
err_reset
;
}
ret
=
regmap_read
(
arizona
->
regmap
,
ARIZONA_DEVICE_REVISION
,
&
arizona
->
rev
);
if
(
ret
!=
0
)
{
dev_err
(
dev
,
"Failed to read revision register: %d
\n
"
,
ret
);
goto
err_reset
;
}
arizona
->
rev
&=
ARIZONA_DEVICE_REVISION_MASK
;
switch
(
reg
)
{
#ifdef CONFIG_MFD_WM5102
case
0x5102
:
type_name
=
"WM5102"
;
if
(
arizona
->
type
!=
WM5102
)
{
dev_err
(
arizona
->
dev
,
"WM5102 registered as %d
\n
"
,
arizona
->
type
);
arizona
->
type
=
WM5102
;
}
apply_patch
=
wm5102_patch
;
arizona
->
rev
&=
0x7
;
break
;
#endif
#ifdef CONFIG_MFD_WM5110
case
0x5110
:
type_name
=
"WM5110"
;
if
(
arizona
->
type
!=
WM5110
)
{
dev_err
(
arizona
->
dev
,
"WM5110 registered as %d
\n
"
,
arizona
->
type
);
arizona
->
type
=
WM5110
;
}
apply_patch
=
wm5110_patch
;
break
;
#endif
default:
dev_err
(
arizona
->
dev
,
"Unknown device ID %x
\n
"
,
reg
);
goto
err_reset
;
}
dev_info
(
dev
,
"%s revision %c
\n
"
,
type_name
,
arizona
->
rev
+
'A'
);
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
].
fas
t_start
)
if
(
arizona
->
pdata
.
micbias
[
i
].
sof
t_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
);
drivers/mfd/arizona-i2c.c
View file @
9912b30f
...
...
@@ -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
,
...
...
drivers/mfd/arizona-spi.c
View file @
9912b30f
...
...
@@ -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
,
...
...
drivers/mfd/arizona.h
View file @
9912b30f
...
...
@@ -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
drivers/mfd/wm5102-tables.c
View file @
9912b30f
...
...
@@ -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
:
...
...
drivers/mfd/wm5110-tables.c
View file @
9912b30f
...
...
@@ -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
;
...
...
include/linux/mfd/arizona/core.h
View file @
9912b30f
...
...
@@ -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
;
...
...
include/linux/mfd/arizona/pdata.h
View file @
9912b30f
...
...
@@ -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
;
/** En
able aggressive startup ramp rate */
unsigned
int
soft_start
:
1
;
/** Dis
able aggressive startup ramp rate */
unsigned
int
bypass
:
1
;
/** Use bypass mode */
};
...
...
include/linux/mfd/arizona/registers.h
View file @
9912b30f
...
...
@@ -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
*/
...
...
sound/soc/codecs/arizona.c
View file @
9912b30f
...
...
@@ -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
];
...
...
sound/soc/codecs/arizona.h
View file @
9912b30f
...
...
@@ -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
...
...
sound/soc/codecs/wm5102.c
View file @
9912b30f
This diff is collapsed.
Click to expand it.
sound/soc/codecs/wm5110.c
View file @
9912b30f
...
...
@@ -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
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment