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
87fee06c
Commit
87fee06c
authored
Jan 10, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/fix/pxa' into tmp
parents
c31b71de
3b4bc7bc
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
28 additions
and
5 deletions
+28
-5
arch/arm/mach-pxa/include/mach/mfp-pxa27x.h
arch/arm/mach-pxa/include/mach/mfp-pxa27x.h
+3
-0
arch/arm/mach-pxa/pxa27x.c
arch/arm/mach-pxa/pxa27x.c
+2
-2
sound/arm/pxa2xx-ac97-lib.c
sound/arm/pxa2xx-ac97-lib.c
+23
-3
No files found.
arch/arm/mach-pxa/include/mach/mfp-pxa27x.h
View file @
87fee06c
...
@@ -463,6 +463,9 @@
...
@@ -463,6 +463,9 @@
GPIO76_LCD_PCLK, \
GPIO76_LCD_PCLK, \
GPIO77_LCD_BIAS
GPIO77_LCD_BIAS
/* these enable a work-around for a hw bug in pxa27x during ac97 warm reset */
#define GPIO113_AC97_nRESET_GPIO_HIGH MFP_CFG_OUT(GPIO113, AF0, DEFAULT)
#define GPIO95_AC97_nRESET_GPIO_HIGH MFP_CFG_OUT(GPIO95, AF0, DEFAULT)
extern
int
keypad_set_wake
(
unsigned
int
on
);
extern
int
keypad_set_wake
(
unsigned
int
on
);
#endif
/* __ASM_ARCH_MFP_PXA27X_H */
#endif
/* __ASM_ARCH_MFP_PXA27X_H */
arch/arm/mach-pxa/pxa27x.c
View file @
87fee06c
...
@@ -47,9 +47,9 @@ void pxa27x_clear_otgph(void)
...
@@ -47,9 +47,9 @@ void pxa27x_clear_otgph(void)
EXPORT_SYMBOL
(
pxa27x_clear_otgph
);
EXPORT_SYMBOL
(
pxa27x_clear_otgph
);
static
unsigned
long
ac97_reset_config
[]
=
{
static
unsigned
long
ac97_reset_config
[]
=
{
GPIO113_
GPIO
,
GPIO113_
AC97_nRESET_GPIO_HIGH
,
GPIO113_AC97_nRESET
,
GPIO113_AC97_nRESET
,
GPIO95_
GPIO
,
GPIO95_
AC97_nRESET_GPIO_HIGH
,
GPIO95_AC97_nRESET
,
GPIO95_AC97_nRESET
,
};
};
...
...
sound/arm/pxa2xx-ac97-lib.c
View file @
87fee06c
...
@@ -18,6 +18,7 @@
...
@@ -18,6 +18,7 @@
#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/module.h>
#include <linux/module.h>
#include <linux/io.h>
#include <linux/io.h>
#include <linux/gpio.h>
#include <sound/ac97_codec.h>
#include <sound/ac97_codec.h>
#include <sound/pxa2xx-lib.h>
#include <sound/pxa2xx-lib.h>
...
@@ -148,6 +149,8 @@ static inline void pxa_ac97_warm_pxa27x(void)
...
@@ -148,6 +149,8 @@ static inline void pxa_ac97_warm_pxa27x(void)
static
inline
void
pxa_ac97_cold_pxa27x
(
void
)
static
inline
void
pxa_ac97_cold_pxa27x
(
void
)
{
{
unsigned
int
timeout
;
GCR
&=
GCR_COLD_RST
;
/* clear everything but nCRST */
GCR
&=
GCR_COLD_RST
;
/* clear everything but nCRST */
GCR
&=
~
GCR_COLD_RST
;
/* then assert nCRST */
GCR
&=
~
GCR_COLD_RST
;
/* then assert nCRST */
...
@@ -157,8 +160,10 @@ static inline void pxa_ac97_cold_pxa27x(void)
...
@@ -157,8 +160,10 @@ static inline void pxa_ac97_cold_pxa27x(void)
clk_enable
(
ac97conf_clk
);
clk_enable
(
ac97conf_clk
);
udelay
(
5
);
udelay
(
5
);
clk_disable
(
ac97conf_clk
);
clk_disable
(
ac97conf_clk
);
GCR
=
GCR_COLD_RST
;
GCR
=
GCR_COLD_RST
|
GCR_WARM_RST
;
udelay
(
50
);
timeout
=
100
;
/* wait for the codec-ready bit to be set */
while
(
!
((
GSR
|
gsr_bits
)
&
(
GSR_PCR
|
GSR_SCR
))
&&
timeout
--
)
mdelay
(
1
);
}
}
#endif
#endif
...
@@ -340,8 +345,21 @@ int pxa2xx_ac97_hw_probe(struct platform_device *dev)
...
@@ -340,8 +345,21 @@ int pxa2xx_ac97_hw_probe(struct platform_device *dev)
}
}
if
(
cpu_is_pxa27x
())
{
if
(
cpu_is_pxa27x
())
{
/* Use GPIO 113 as AC97 Reset on Bulverde */
/*
* This gpio is needed for a work-around to a bug in the ac97
* controller during warm reset. The direction and level is set
* here so that it is an output driven high when switching from
* AC97_nRESET alt function to generic gpio.
*/
ret
=
gpio_request_one
(
reset_gpio
,
GPIOF_OUT_INIT_HIGH
,
"pxa27x ac97 reset"
);
if
(
ret
<
0
)
{
pr_err
(
"%s: gpio_request_one() failed: %d
\n
"
,
__func__
,
ret
);
goto
err_conf
;
}
pxa27x_assert_ac97reset
(
reset_gpio
,
0
);
pxa27x_assert_ac97reset
(
reset_gpio
,
0
);
ac97conf_clk
=
clk_get
(
&
dev
->
dev
,
"AC97CONFCLK"
);
ac97conf_clk
=
clk_get
(
&
dev
->
dev
,
"AC97CONFCLK"
);
if
(
IS_ERR
(
ac97conf_clk
))
{
if
(
IS_ERR
(
ac97conf_clk
))
{
ret
=
PTR_ERR
(
ac97conf_clk
);
ret
=
PTR_ERR
(
ac97conf_clk
);
...
@@ -384,6 +402,8 @@ EXPORT_SYMBOL_GPL(pxa2xx_ac97_hw_probe);
...
@@ -384,6 +402,8 @@ EXPORT_SYMBOL_GPL(pxa2xx_ac97_hw_probe);
void
pxa2xx_ac97_hw_remove
(
struct
platform_device
*
dev
)
void
pxa2xx_ac97_hw_remove
(
struct
platform_device
*
dev
)
{
{
if
(
cpu_is_pxa27x
())
gpio_free
(
reset_gpio
);
GCR
|=
GCR_ACLINK_OFF
;
GCR
|=
GCR_ACLINK_OFF
;
free_irq
(
IRQ_AC97
,
NULL
);
free_irq
(
IRQ_AC97
,
NULL
);
if
(
ac97conf_clk
)
{
if
(
ac97conf_clk
)
{
...
...
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