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
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