mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-28 01:21:58 +00:00
Merge remote-tracking branch 'asoc/fix/pxa' into tmp
This commit is contained in:
commit
87fee06c5b
3 changed files with 28 additions and 5 deletions
|
@ -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 */
|
||||||
|
|
|
@ -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,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
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) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue