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
Kirill Smelkov
linux
Commits
fe2a1e53
Commit
fe2a1e53
authored
Aug 22, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/omap' into asoc-next
parents
49ffa3b1
673c24e9
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
52 additions
and
153 deletions
+52
-153
include/linux/platform_data/omap-abe-twl6040.h
include/linux/platform_data/omap-abe-twl6040.h
+0
-49
sound/soc/omap/Kconfig
sound/soc/omap/Kconfig
+3
-3
sound/soc/omap/omap-abe-twl6040.c
sound/soc/omap/omap-abe-twl6040.c
+41
-92
sound/soc/omap/omap-dmic.c
sound/soc/omap/omap-dmic.c
+3
-6
sound/soc/omap/omap-mcbsp.c
sound/soc/omap/omap-mcbsp.c
+5
-0
sound/soc/omap/omap-mcpdm.c
sound/soc/omap/omap-mcpdm.c
+0
-3
No files found.
include/linux/platform_data/omap-abe-twl6040.h
deleted
100644 → 0
View file @
49ffa3b1
/**
* omap-abe-twl6040.h - ASoC machine driver OMAP4+ devices, header.
*
* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com
* All rights reserved.
*
* Author: Peter Ujfalusi <peter.ujfalusi@ti.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#ifndef _OMAP_ABE_TWL6040_H_
#define _OMAP_ABE_TWL6040_H_
/* To select if only one channel is connected in a stereo port */
#define ABE_TWL6040_LEFT (1 << 0)
#define ABE_TWL6040_RIGHT (1 << 1)
struct
omap_abe_twl6040_data
{
char
*
card_name
;
/* Feature flags for connected audio pins */
u8
has_hs
;
u8
has_hf
;
bool
has_ep
;
u8
has_aux
;
u8
has_vibra
;
bool
has_dmic
;
bool
has_hsmic
;
bool
has_mainmic
;
bool
has_submic
;
u8
has_afm
;
/* Other features */
bool
jack_detection
;
/* board can detect jack events */
int
mclk_freq
;
/* MCLK frequency speed for twl6040 */
};
#endif
/* _OMAP_ABE_TWL6040_H_ */
sound/soc/omap/Kconfig
View file @
fe2a1e53
config SND_OMAP_SOC
tristate "SoC Audio for the Texas Instruments OMAP chips"
depends on
ARCH_OMAP && DMA_OMAP
depends on
(ARCH_OMAP && DMA_OMAP) || (ARCH_ARM && COMPILE_TEST)
select SND_DMAENGINE_PCM
config SND_OMAP_SOC_DMIC
...
...
@@ -26,7 +26,7 @@ config SND_OMAP_SOC_N810
config SND_OMAP_SOC_RX51
tristate "SoC Audio support for Nokia RX-51"
depends on SND_OMAP_SOC &&
MACH_NOKIA_RX51
depends on SND_OMAP_SOC &&
ARCH_ARM && (MACH_NOKIA_RX51 || COMPILE_TEST)
select SND_OMAP_SOC_MCBSP
select SND_SOC_TLV320AIC3X
select SND_SOC_TPA6130A2
...
...
@@ -87,7 +87,7 @@ config SND_OMAP_SOC_OMAP_TWL4030
config SND_OMAP_SOC_OMAP_ABE_TWL6040
tristate "SoC Audio support for OMAP boards using ABE and twl6040 codec"
depends on TWL6040_CORE && SND_OMAP_SOC &&
ARCH_OMAP4
depends on TWL6040_CORE && SND_OMAP_SOC &&
(ARCH_OMAP4 || COMPILE_TEST)
select SND_OMAP_SOC_DMIC
select SND_OMAP_SOC_MCPDM
select SND_SOC_TWL6040
...
...
sound/soc/omap/omap-abe-twl6040.c
View file @
fe2a1e53
...
...
@@ -23,7 +23,6 @@
#include <linux/clk.h>
#include <linux/platform_device.h>
#include <linux/mfd/twl6040.h>
#include <linux/platform_data/omap-abe-twl6040.h>
#include <linux/module.h>
#include <linux/of.h>
...
...
@@ -166,19 +165,10 @@ static const struct snd_soc_dapm_route audio_map[] = {
{
"AFMR"
,
NULL
,
"Line In"
},
};
static
inline
void
twl6040_disconnect_pin
(
struct
snd_soc_dapm_context
*
dapm
,
int
connected
,
char
*
pin
)
{
if
(
!
connected
)
snd_soc_dapm_disable_pin
(
dapm
,
pin
);
}
static
int
omap_abe_twl6040_init
(
struct
snd_soc_pcm_runtime
*
rtd
)
{
struct
snd_soc_codec
*
codec
=
rtd
->
codec
;
struct
snd_soc_card
*
card
=
codec
->
card
;
struct
snd_soc_dapm_context
*
dapm
=
&
codec
->
dapm
;
struct
omap_abe_twl6040_data
*
pdata
=
dev_get_platdata
(
card
->
dev
);
struct
abe_twl6040
*
priv
=
snd_soc_card_get_drvdata
(
card
);
int
hs_trim
;
int
ret
=
0
;
...
...
@@ -203,24 +193,6 @@ static int omap_abe_twl6040_init(struct snd_soc_pcm_runtime *rtd)
twl6040_hs_jack_detect
(
codec
,
&
hs_jack
,
SND_JACK_HEADSET
);
}
/*
* NULL pdata means we booted with DT. In this case the routing is
* provided and the card is fully routed, no need to mark pins.
*/
if
(
!
pdata
)
return
ret
;
/* Disable not connected paths if not used */
twl6040_disconnect_pin
(
dapm
,
pdata
->
has_hs
,
"Headset Stereophone"
);
twl6040_disconnect_pin
(
dapm
,
pdata
->
has_hf
,
"Ext Spk"
);
twl6040_disconnect_pin
(
dapm
,
pdata
->
has_ep
,
"Earphone Spk"
);
twl6040_disconnect_pin
(
dapm
,
pdata
->
has_aux
,
"Line Out"
);
twl6040_disconnect_pin
(
dapm
,
pdata
->
has_vibra
,
"Vibrator"
);
twl6040_disconnect_pin
(
dapm
,
pdata
->
has_hsmic
,
"Headset Mic"
);
twl6040_disconnect_pin
(
dapm
,
pdata
->
has_mainmic
,
"Main Handset Mic"
);
twl6040_disconnect_pin
(
dapm
,
pdata
->
has_submic
,
"Sub Handset Mic"
);
twl6040_disconnect_pin
(
dapm
,
pdata
->
has_afm
,
"Line In"
);
return
ret
;
}
...
...
@@ -274,13 +246,18 @@ static struct snd_soc_card omap_abe_card = {
static
int
omap_abe_probe
(
struct
platform_device
*
pdev
)
{
struct
omap_abe_twl6040_data
*
pdata
=
dev_get_platdata
(
&
pdev
->
dev
);
struct
device_node
*
node
=
pdev
->
dev
.
of_node
;
struct
snd_soc_card
*
card
=
&
omap_abe_card
;
struct
device_node
*
dai_node
;
struct
abe_twl6040
*
priv
;
int
num_links
=
0
;
int
ret
=
0
;
if
(
!
node
)
{
dev_err
(
&
pdev
->
dev
,
"of node is missing.
\n
"
);
return
-
ENODEV
;
}
card
->
dev
=
&
pdev
->
dev
;
priv
=
devm_kzalloc
(
&
pdev
->
dev
,
sizeof
(
struct
abe_twl6040
),
GFP_KERNEL
);
...
...
@@ -289,78 +266,50 @@ static int omap_abe_probe(struct platform_device *pdev)
priv
->
dmic_codec_dev
=
ERR_PTR
(
-
EINVAL
);
if
(
node
)
{
struct
device_node
*
dai_node
;
if
(
snd_soc_of_parse_card_name
(
card
,
"ti,model"
))
{
dev_err
(
&
pdev
->
dev
,
"Card name is not provided
\n
"
);
return
-
ENODEV
;
}
if
(
snd_soc_of_parse_card_name
(
card
,
"ti,model"
))
{
dev_err
(
&
pdev
->
dev
,
"Card name is not provided
\n
"
);
return
-
ENODEV
;
}
ret
=
snd_soc_of_parse_audio_routing
(
card
,
"ti,audio-routing"
);
if
(
ret
)
{
dev_err
(
&
pdev
->
dev
,
"Error while parsing DAPM routing
\n
"
);
return
ret
;
}
ret
=
snd_soc_of_parse_audio_routing
(
card
,
"ti,audio-routing"
);
if
(
ret
)
{
dev_err
(
&
pdev
->
dev
,
"Error while parsing DAPM routing
\n
"
);
return
ret
;
}
dai_node
=
of_parse_phandle
(
node
,
"ti,mcpdm"
,
0
);
if
(
!
dai_node
)
{
dev_err
(
&
pdev
->
dev
,
"McPDM node is not provided
\n
"
);
return
-
EINVAL
;
}
abe_twl6040_dai_links
[
0
].
cpu_dai_name
=
NULL
;
abe_twl6040_dai_links
[
0
].
cpu_of_node
=
dai_node
;
dai_node
=
of_parse_phandle
(
node
,
"ti,mcpdm"
,
0
);
if
(
!
dai_node
)
{
dev_err
(
&
pdev
->
dev
,
"McPDM node is not provided
\n
"
);
return
-
EINVAL
;
}
abe_twl6040_dai_links
[
0
].
cpu_dai_name
=
NULL
;
abe_twl6040_dai_links
[
0
].
cpu_of_node
=
dai_node
;
dai_node
=
of_parse_phandle
(
node
,
"ti,dmic"
,
0
);
if
(
dai_node
)
{
num_links
=
2
;
abe_twl6040_dai_links
[
1
].
cpu_dai_name
=
NULL
;
abe_twl6040_dai_links
[
1
].
cpu_of_node
=
dai_node
;
dai_node
=
of_parse_phandle
(
node
,
"ti,dmic"
,
0
);
if
(
dai_node
)
{
num_links
=
2
;
abe_twl6040_dai_links
[
1
].
cpu_dai_name
=
NULL
;
abe_twl6040_dai_links
[
1
].
cpu_of_node
=
dai_node
;
priv
->
dmic_codec_dev
=
platform_device_register_simple
(
priv
->
dmic_codec_dev
=
platform_device_register_simple
(
"dmic-codec"
,
-
1
,
NULL
,
0
);
if
(
IS_ERR
(
priv
->
dmic_codec_dev
))
{
dev_err
(
&
pdev
->
dev
,
"Can't instantiate dmic-codec
\n
"
);
return
PTR_ERR
(
priv
->
dmic_codec_dev
);
}
}
else
{
num_links
=
1
;
}
priv
->
jack_detection
=
of_property_read_bool
(
node
,
"ti,jack-detection"
);
of_property_read_u32
(
node
,
"ti,mclk-freq"
,
&
priv
->
mclk_freq
);
if
(
!
priv
->
mclk_freq
)
{
dev_err
(
&
pdev
->
dev
,
"MCLK frequency not provided
\n
"
);
ret
=
-
EINVAL
;
goto
err_unregister
;
if
(
IS_ERR
(
priv
->
dmic_codec_dev
))
{
dev_err
(
&
pdev
->
dev
,
"Can't instantiate dmic-codec
\n
"
);
return
PTR_ERR
(
priv
->
dmic_codec_dev
);
}
omap_abe_card
.
fully_routed
=
1
;
}
else
if
(
pdata
)
{
if
(
pdata
->
card_name
)
{
card
->
name
=
pdata
->
card_name
;
}
else
{
dev_err
(
&
pdev
->
dev
,
"Card name is not provided
\n
"
);
return
-
ENODEV
;
}
if
(
pdata
->
has_dmic
)
num_links
=
2
;
else
num_links
=
1
;
priv
->
jack_detection
=
pdata
->
jack_detection
;
priv
->
mclk_freq
=
pdata
->
mclk_freq
;
}
else
{
dev_err
(
&
pdev
->
dev
,
"Missing pdata
\n
"
);
return
-
ENODEV
;
num_links
=
1
;
}
priv
->
jack_detection
=
of_property_read_bool
(
node
,
"ti,jack-detection"
);
of_property_read_u32
(
node
,
"ti,mclk-freq"
,
&
priv
->
mclk_freq
);
if
(
!
priv
->
mclk_freq
)
{
dev_err
(
&
pdev
->
dev
,
"MCLK frequency not provided
\n
"
);
ret
=
-
EINVAL
;
goto
err_unregister
;
}
card
->
fully_routed
=
1
;
if
(
!
priv
->
mclk_freq
)
{
dev_err
(
&
pdev
->
dev
,
"MCLK frequency missing
\n
"
);
...
...
sound/soc/omap/omap-dmic.c
View file @
fe2a1e53
...
...
@@ -480,15 +480,12 @@ static int asoc_dmic_probe(struct platform_device *pdev)
dmic
->
dma_data
.
filter_data
=
"up_link"
;
res
=
platform_get_resource_byname
(
pdev
,
IORESOURCE_MEM
,
"mpu"
);
if
(
!
res
)
{
dev_err
(
dmic
->
dev
,
"invalid memory resource
\n
"
);
ret
=
-
ENODEV
;
dmic
->
io_base
=
devm_ioremap_resource
(
&
pdev
->
dev
,
res
);
if
(
IS_ERR
(
dmic
->
io_base
))
{
ret
=
PTR_ERR
(
dmic
->
io_base
)
;
goto
err_put_clk
;
}
dmic
->
io_base
=
devm_ioremap_resource
(
&
pdev
->
dev
,
res
);
if
(
IS_ERR
(
dmic
->
io_base
))
return
PTR_ERR
(
dmic
->
io_base
);
ret
=
snd_soc_register_component
(
&
pdev
->
dev
,
&
omap_dmic_component
,
&
omap_dmic_dai
,
1
);
...
...
sound/soc/omap/omap-mcbsp.c
View file @
fe2a1e53
...
...
@@ -433,6 +433,11 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai,
/* Sample rate generator drives the FS */
regs
->
srgr2
|=
FSGM
;
break
;
case
SND_SOC_DAIFMT_CBM_CFS
:
/* McBSP slave. FS clock as output */
regs
->
srgr2
|=
FSGM
;
regs
->
pcr0
|=
FSXM
;
break
;
case
SND_SOC_DAIFMT_CBM_CFM
:
/* McBSP slave */
break
;
...
...
sound/soc/omap/omap-mcpdm.c
View file @
fe2a1e53
...
...
@@ -480,9 +480,6 @@ static int asoc_mcpdm_probe(struct platform_device *pdev)
mcpdm
->
dma_data
[
1
].
filter_data
=
"up_link"
;
res
=
platform_get_resource_byname
(
pdev
,
IORESOURCE_MEM
,
"mpu"
);
if
(
res
==
NULL
)
return
-
ENOMEM
;
mcpdm
->
io_base
=
devm_ioremap_resource
(
&
pdev
->
dev
,
res
);
if
(
IS_ERR
(
mcpdm
->
io_base
))
return
PTR_ERR
(
mcpdm
->
io_base
);
...
...
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