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
0d7b5c93
Commit
0d7b5c93
authored
Nov 10, 2017
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branches 'asoc/topic/rl6231' and 'asoc/topic/rt5514' into asoc-next
parents
5b04644a
57f7feff
c5630877
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
66 additions
and
9 deletions
+66
-9
Documentation/devicetree/bindings/sound/rt5514.txt
Documentation/devicetree/bindings/sound/rt5514.txt
+9
-4
sound/soc/codecs/Kconfig
sound/soc/codecs/Kconfig
+4
-0
sound/soc/codecs/Makefile
sound/soc/codecs/Makefile
+1
-0
sound/soc/codecs/rl6231.c
sound/soc/codecs/rl6231.c
+3
-2
sound/soc/codecs/rt5514-spi.c
sound/soc/codecs/rt5514-spi.c
+46
-0
sound/soc/codecs/rt5514.c
sound/soc/codecs/rt5514.c
+3
-3
No files found.
Documentation/devicetree/bindings/sound/rt5514.txt
View file @
0d7b5c93
RT5514 audio CODEC
RT5514 audio CODEC
This device supports
I2C only
.
This device supports
both I2C and SPI
.
Required properties:
Required properties:
- compatible : "realtek,rt5514".
- compatible : "realtek,rt5514".
- reg : The I2C address of the device.
- reg : the I2C address of the device for I2C, the chip select
number for SPI.
Optional properties:
Optional properties:
- clocks: The phandle of the master clock to the CODEC
- clocks: The phandle of the master clock to the CODEC
- clock-names: Should be "mclk"
- clock-names: Should be "mclk"
- interrupt-parent: The phandle for the interrupt controller.
- interrupts: The interrupt number to the cpu. The interrupt specifier format
depends on the interrupt controller.
- realtek,dmic-init-delay-ms
- realtek,dmic-init-delay-ms
Set the DMIC initial delay (ms) to wait it ready.
Set the DMIC initial delay (ms) to wait it ready
for I2C
.
Pins on the device (for linking into audio routes) for
RT5514
:
Pins on the device (for linking into audio routes) for
I2C
:
* DMIC1L
* DMIC1L
* DMIC1R
* DMIC1R
...
...
sound/soc/codecs/Kconfig
View file @
0d7b5c93
...
@@ -749,6 +749,10 @@ config SND_SOC_RT5514
...
@@ -749,6 +749,10 @@ config SND_SOC_RT5514
config SND_SOC_RT5514_SPI
config SND_SOC_RT5514_SPI
tristate
tristate
config SND_SOC_RT5514_SPI_BUILTIN
bool # force RT5514_SPI to be built-in to avoid link errors
default SND_SOC_RT5514=y && SND_SOC_RT5514_SPI=m
config SND_SOC_RT5616
config SND_SOC_RT5616
tristate "Realtek RT5616 CODEC"
tristate "Realtek RT5616 CODEC"
depends on I2C
depends on I2C
...
...
sound/soc/codecs/Makefile
View file @
0d7b5c93
...
@@ -360,6 +360,7 @@ obj-$(CONFIG_SND_SOC_RT286) += snd-soc-rt286.o
...
@@ -360,6 +360,7 @@ obj-$(CONFIG_SND_SOC_RT286) += snd-soc-rt286.o
obj-$(CONFIG_SND_SOC_RT298)
+=
snd-soc-rt298.o
obj-$(CONFIG_SND_SOC_RT298)
+=
snd-soc-rt298.o
obj-$(CONFIG_SND_SOC_RT5514)
+=
snd-soc-rt5514.o
obj-$(CONFIG_SND_SOC_RT5514)
+=
snd-soc-rt5514.o
obj-$(CONFIG_SND_SOC_RT5514_SPI)
+=
snd-soc-rt5514-spi.o
obj-$(CONFIG_SND_SOC_RT5514_SPI)
+=
snd-soc-rt5514-spi.o
obj-$(CONFIG_SND_SOC_RT5514_SPI_BUILTIN)
+=
snd-soc-rt5514-spi.o
obj-$(CONFIG_SND_SOC_RT5616)
+=
snd-soc-rt5616.o
obj-$(CONFIG_SND_SOC_RT5616)
+=
snd-soc-rt5616.o
obj-$(CONFIG_SND_SOC_RT5631)
+=
snd-soc-rt5631.o
obj-$(CONFIG_SND_SOC_RT5631)
+=
snd-soc-rt5631.o
obj-$(CONFIG_SND_SOC_RT5640)
+=
snd-soc-rt5640.o
obj-$(CONFIG_SND_SOC_RT5640)
+=
snd-soc-rt5640.o
...
...
sound/soc/codecs/rl6231.c
View file @
0d7b5c93
...
@@ -71,7 +71,7 @@ EXPORT_SYMBOL_GPL(rl6231_get_pre_div);
...
@@ -71,7 +71,7 @@ EXPORT_SYMBOL_GPL(rl6231_get_pre_div);
*/
*/
int
rl6231_calc_dmic_clk
(
int
rate
)
int
rl6231_calc_dmic_clk
(
int
rate
)
{
{
int
div
[]
=
{
2
,
3
,
4
,
6
,
8
,
12
};
static
const
int
div
[]
=
{
2
,
3
,
4
,
6
,
8
,
12
};
int
i
;
int
i
;
if
(
rate
<
1000000
*
div
[
0
])
{
if
(
rate
<
1000000
*
div
[
0
])
{
...
@@ -189,7 +189,8 @@ EXPORT_SYMBOL_GPL(rl6231_pll_calc);
...
@@ -189,7 +189,8 @@ EXPORT_SYMBOL_GPL(rl6231_pll_calc);
int
rl6231_get_clk_info
(
int
sclk
,
int
rate
)
int
rl6231_get_clk_info
(
int
sclk
,
int
rate
)
{
{
int
i
,
pd
[]
=
{
1
,
2
,
3
,
4
,
6
,
8
,
12
,
16
};
int
i
;
static
const
int
pd
[]
=
{
1
,
2
,
3
,
4
,
6
,
8
,
12
,
16
};
if
(
sclk
<=
0
||
rate
<=
0
)
if
(
sclk
<=
0
||
rate
<=
0
)
return
-
EINVAL
;
return
-
EINVAL
;
...
...
sound/soc/codecs/rt5514-spi.c
View file @
0d7b5c93
...
@@ -147,8 +147,13 @@ static void rt5514_spi_copy_work(struct work_struct *work)
...
@@ -147,8 +147,13 @@ static void rt5514_spi_copy_work(struct work_struct *work)
static
void
rt5514_schedule_copy
(
struct
rt5514_dsp
*
rt5514_dsp
)
static
void
rt5514_schedule_copy
(
struct
rt5514_dsp
*
rt5514_dsp
)
{
{
size_t
period_bytes
;
u8
buf
[
8
];
u8
buf
[
8
];
if
(
!
rt5514_dsp
->
substream
)
return
;
period_bytes
=
snd_pcm_lib_period_bytes
(
rt5514_dsp
->
substream
);
rt5514_dsp
->
get_size
=
0
;
rt5514_dsp
->
get_size
=
0
;
/**
/**
...
@@ -176,6 +181,10 @@ static void rt5514_schedule_copy(struct rt5514_dsp *rt5514_dsp)
...
@@ -176,6 +181,10 @@ static void rt5514_schedule_copy(struct rt5514_dsp *rt5514_dsp)
rt5514_dsp
->
buf_size
=
rt5514_dsp
->
buf_limit
-
rt5514_dsp
->
buf_base
;
rt5514_dsp
->
buf_size
=
rt5514_dsp
->
buf_limit
-
rt5514_dsp
->
buf_base
;
if
(
rt5514_dsp
->
buf_size
%
period_bytes
)
rt5514_dsp
->
buf_size
=
(
rt5514_dsp
->
buf_size
/
period_bytes
)
*
period_bytes
;
if
(
rt5514_dsp
->
buf_base
&&
rt5514_dsp
->
buf_limit
&&
if
(
rt5514_dsp
->
buf_base
&&
rt5514_dsp
->
buf_limit
&&
rt5514_dsp
->
buf_rp
&&
rt5514_dsp
->
buf_size
)
rt5514_dsp
->
buf_rp
&&
rt5514_dsp
->
buf_size
)
schedule_delayed_work
(
&
rt5514_dsp
->
copy_work
,
0
);
schedule_delayed_work
(
&
rt5514_dsp
->
copy_work
,
0
);
...
@@ -447,9 +456,45 @@ static int rt5514_spi_probe(struct spi_device *spi)
...
@@ -447,9 +456,45 @@ static int rt5514_spi_probe(struct spi_device *spi)
return
ret
;
return
ret
;
}
}
device_init_wakeup
(
&
spi
->
dev
,
true
);
return
0
;
}
static
int
__maybe_unused
rt5514_suspend
(
struct
device
*
dev
)
{
int
irq
=
to_spi_device
(
dev
)
->
irq
;
if
(
device_may_wakeup
(
dev
))
enable_irq_wake
(
irq
);
return
0
;
}
static
int
__maybe_unused
rt5514_resume
(
struct
device
*
dev
)
{
struct
snd_soc_platform
*
platform
=
snd_soc_lookup_platform
(
dev
);
struct
rt5514_dsp
*
rt5514_dsp
=
snd_soc_platform_get_drvdata
(
platform
);
int
irq
=
to_spi_device
(
dev
)
->
irq
;
u8
buf
[
8
];
if
(
device_may_wakeup
(
dev
))
disable_irq_wake
(
irq
);
if
(
rt5514_dsp
->
substream
)
{
rt5514_spi_burst_read
(
RT5514_IRQ_CTRL
,
(
u8
*
)
&
buf
,
sizeof
(
buf
));
if
(
buf
[
0
]
&
RT5514_IRQ_STATUS_BIT
)
rt5514_schedule_copy
(
rt5514_dsp
);
}
return
0
;
return
0
;
}
}
static
const
struct
dev_pm_ops
rt5514_pm_ops
=
{
SET_SYSTEM_SLEEP_PM_OPS
(
rt5514_suspend
,
rt5514_resume
)
};
static
const
struct
of_device_id
rt5514_of_match
[]
=
{
static
const
struct
of_device_id
rt5514_of_match
[]
=
{
{
.
compatible
=
"realtek,rt5514"
,
},
{
.
compatible
=
"realtek,rt5514"
,
},
{},
{},
...
@@ -459,6 +504,7 @@ MODULE_DEVICE_TABLE(of, rt5514_of_match);
...
@@ -459,6 +504,7 @@ MODULE_DEVICE_TABLE(of, rt5514_of_match);
static
struct
spi_driver
rt5514_spi_driver
=
{
static
struct
spi_driver
rt5514_spi_driver
=
{
.
driver
=
{
.
driver
=
{
.
name
=
"rt5514"
,
.
name
=
"rt5514"
,
.
pm
=
&
rt5514_pm_ops
,
.
of_match_table
=
of_match_ptr
(
rt5514_of_match
),
.
of_match_table
=
of_match_ptr
(
rt5514_of_match
),
},
},
.
probe
=
rt5514_spi_probe
,
.
probe
=
rt5514_spi_probe
,
...
...
sound/soc/codecs/rt5514.c
View file @
0d7b5c93
...
@@ -1143,7 +1143,7 @@ static const struct acpi_device_id rt5514_acpi_match[] = {
...
@@ -1143,7 +1143,7 @@ static const struct acpi_device_id rt5514_acpi_match[] = {
MODULE_DEVICE_TABLE
(
acpi
,
rt5514_acpi_match
);
MODULE_DEVICE_TABLE
(
acpi
,
rt5514_acpi_match
);
#endif
#endif
static
int
rt5514_parse_d
t
(
struct
rt5514_priv
*
rt5514
,
struct
device
*
dev
)
static
int
rt5514_parse_d
p
(
struct
rt5514_priv
*
rt5514
,
struct
device
*
dev
)
{
{
device_property_read_u32
(
dev
,
"realtek,dmic-init-delay-ms"
,
device_property_read_u32
(
dev
,
"realtek,dmic-init-delay-ms"
,
&
rt5514
->
pdata
.
dmic_init_delay
);
&
rt5514
->
pdata
.
dmic_init_delay
);
...
@@ -1183,8 +1183,8 @@ static int rt5514_i2c_probe(struct i2c_client *i2c,
...
@@ -1183,8 +1183,8 @@ static int rt5514_i2c_probe(struct i2c_client *i2c,
if
(
pdata
)
if
(
pdata
)
rt5514
->
pdata
=
*
pdata
;
rt5514
->
pdata
=
*
pdata
;
else
if
(
i2c
->
dev
.
of_node
)
else
rt5514_parse_d
t
(
rt5514
,
&
i2c
->
dev
);
rt5514_parse_d
p
(
rt5514
,
&
i2c
->
dev
);
rt5514
->
i2c_regmap
=
devm_regmap_init_i2c
(
i2c
,
&
rt5514_i2c_regmap
);
rt5514
->
i2c_regmap
=
devm_regmap_init_i2c
(
i2c
,
&
rt5514_i2c_regmap
);
if
(
IS_ERR
(
rt5514
->
i2c_regmap
))
{
if
(
IS_ERR
(
rt5514
->
i2c_regmap
))
{
...
...
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