Loading arch/arm/mach-pxa/pxa27x.c +14 −6 Original line number Diff line number Diff line Loading @@ -53,17 +53,25 @@ static unsigned long ac97_reset_config[] = { GPIO95_AC97_nRESET, }; void pxa27x_assert_ac97reset(int reset_gpio, int on) void pxa27x_configure_ac97reset(int reset_gpio, bool to_gpio) { /* * This helper function is used to work around a bug in the pxa27x's * ac97 controller during a warm reset. The configuration of the * reset_gpio is changed as follows: * to_gpio == true: configured to generic output gpio and driven high * to_gpio == false: configured to ac97 controller alt fn AC97_nRESET */ if (reset_gpio == 113) pxa2xx_mfp_config(on ? &ac97_reset_config[0] : pxa2xx_mfp_config(to_gpio ? &ac97_reset_config[0] : &ac97_reset_config[1], 1); if (reset_gpio == 95) pxa2xx_mfp_config(on ? &ac97_reset_config[2] : pxa2xx_mfp_config(to_gpio ? &ac97_reset_config[2] : &ac97_reset_config[3], 1); } EXPORT_SYMBOL_GPL(pxa27x_assert_ac97reset); EXPORT_SYMBOL_GPL(pxa27x_configure_ac97reset); /* Crystal clock: 13MHz */ #define BASE_CLK 13000000 Loading sound/arm/pxa2xx-ac97-lib.c +4 −4 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ static struct clk *ac97_clk; static struct clk *ac97conf_clk; static int reset_gpio; extern void pxa27x_assert_ac97reset(int reset_gpio, int on); extern void pxa27x_configure_ac97reset(int reset_gpio, bool to_gpio); /* * Beware PXA27x bugs: Loading Loading @@ -140,10 +140,10 @@ static inline void pxa_ac97_warm_pxa27x(void) gsr_bits = 0; /* warm reset broken on Bulverde, so manually keep AC97 reset high */ pxa27x_assert_ac97reset(reset_gpio, 1); pxa27x_configure_ac97reset(reset_gpio, true); udelay(10); GCR |= GCR_WARM_RST; pxa27x_assert_ac97reset(reset_gpio, 0); pxa27x_configure_ac97reset(reset_gpio, false); udelay(500); } Loading Loading @@ -358,7 +358,7 @@ int pxa2xx_ac97_hw_probe(struct platform_device *dev) __func__, ret); goto err_conf; } pxa27x_assert_ac97reset(reset_gpio, 0); pxa27x_configure_ac97reset(reset_gpio, false); ac97conf_clk = clk_get(&dev->dev, "AC97CONFCLK"); if (IS_ERR(ac97conf_clk)) { Loading sound/soc/pxa/palm27x.c +10 −28 Original line number Diff line number Diff line Loading @@ -79,17 +79,6 @@ static int palm27x_ac97_init(struct snd_soc_pcm_runtime *rtd) struct snd_soc_dapm_context *dapm = &codec->dapm; int err; /* add palm27x specific widgets */ err = snd_soc_dapm_new_controls(dapm, palm27x_dapm_widgets, ARRAY_SIZE(palm27x_dapm_widgets)); if (err) return err; /* set up palm27x specific audio path audio_map */ err = snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); if (err) return err; /* connected pins */ if (machine_is_palmld()) snd_soc_dapm_enable_pin(dapm, "MIC1"); Loading Loading @@ -149,10 +138,12 @@ static struct snd_soc_card palm27x_asoc = { .owner = THIS_MODULE, .dai_link = palm27x_dai, .num_links = ARRAY_SIZE(palm27x_dai), .dapm_widgets = palm27x_dapm_widgets, .num_dapm_widgets = ARRAY_SIZE(palm27x_dapm_widgets), .dapm_routes = audio_map, .num_dapm_routes = ARRAY_SIZE(audio_map) }; static struct platform_device *palm27x_snd_device; static int palm27x_asoc_probe(struct platform_device *pdev) { int ret; Loading @@ -169,27 +160,18 @@ static int palm27x_asoc_probe(struct platform_device *pdev) hs_jack_gpios[0].gpio = ((struct palm27x_asoc_info *) (pdev->dev.platform_data))->jack_gpio; palm27x_snd_device = platform_device_alloc("soc-audio", -1); if (!palm27x_snd_device) return -ENOMEM; platform_set_drvdata(palm27x_snd_device, &palm27x_asoc); ret = platform_device_add(palm27x_snd_device); if (ret != 0) goto put_device; return 0; put_device: platform_device_put(palm27x_snd_device); palm27x_asoc.dev = &pdev->dev; ret = snd_soc_register_card(&palm27x_asoc); if (ret) dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", ret); return ret; } static int palm27x_asoc_remove(struct platform_device *pdev) { platform_device_unregister(palm27x_snd_device); snd_soc_unregister_card(&palm27x_asoc); return 0; } Loading Loading
arch/arm/mach-pxa/pxa27x.c +14 −6 Original line number Diff line number Diff line Loading @@ -53,17 +53,25 @@ static unsigned long ac97_reset_config[] = { GPIO95_AC97_nRESET, }; void pxa27x_assert_ac97reset(int reset_gpio, int on) void pxa27x_configure_ac97reset(int reset_gpio, bool to_gpio) { /* * This helper function is used to work around a bug in the pxa27x's * ac97 controller during a warm reset. The configuration of the * reset_gpio is changed as follows: * to_gpio == true: configured to generic output gpio and driven high * to_gpio == false: configured to ac97 controller alt fn AC97_nRESET */ if (reset_gpio == 113) pxa2xx_mfp_config(on ? &ac97_reset_config[0] : pxa2xx_mfp_config(to_gpio ? &ac97_reset_config[0] : &ac97_reset_config[1], 1); if (reset_gpio == 95) pxa2xx_mfp_config(on ? &ac97_reset_config[2] : pxa2xx_mfp_config(to_gpio ? &ac97_reset_config[2] : &ac97_reset_config[3], 1); } EXPORT_SYMBOL_GPL(pxa27x_assert_ac97reset); EXPORT_SYMBOL_GPL(pxa27x_configure_ac97reset); /* Crystal clock: 13MHz */ #define BASE_CLK 13000000 Loading
sound/arm/pxa2xx-ac97-lib.c +4 −4 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ static struct clk *ac97_clk; static struct clk *ac97conf_clk; static int reset_gpio; extern void pxa27x_assert_ac97reset(int reset_gpio, int on); extern void pxa27x_configure_ac97reset(int reset_gpio, bool to_gpio); /* * Beware PXA27x bugs: Loading Loading @@ -140,10 +140,10 @@ static inline void pxa_ac97_warm_pxa27x(void) gsr_bits = 0; /* warm reset broken on Bulverde, so manually keep AC97 reset high */ pxa27x_assert_ac97reset(reset_gpio, 1); pxa27x_configure_ac97reset(reset_gpio, true); udelay(10); GCR |= GCR_WARM_RST; pxa27x_assert_ac97reset(reset_gpio, 0); pxa27x_configure_ac97reset(reset_gpio, false); udelay(500); } Loading Loading @@ -358,7 +358,7 @@ int pxa2xx_ac97_hw_probe(struct platform_device *dev) __func__, ret); goto err_conf; } pxa27x_assert_ac97reset(reset_gpio, 0); pxa27x_configure_ac97reset(reset_gpio, false); ac97conf_clk = clk_get(&dev->dev, "AC97CONFCLK"); if (IS_ERR(ac97conf_clk)) { Loading
sound/soc/pxa/palm27x.c +10 −28 Original line number Diff line number Diff line Loading @@ -79,17 +79,6 @@ static int palm27x_ac97_init(struct snd_soc_pcm_runtime *rtd) struct snd_soc_dapm_context *dapm = &codec->dapm; int err; /* add palm27x specific widgets */ err = snd_soc_dapm_new_controls(dapm, palm27x_dapm_widgets, ARRAY_SIZE(palm27x_dapm_widgets)); if (err) return err; /* set up palm27x specific audio path audio_map */ err = snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); if (err) return err; /* connected pins */ if (machine_is_palmld()) snd_soc_dapm_enable_pin(dapm, "MIC1"); Loading Loading @@ -149,10 +138,12 @@ static struct snd_soc_card palm27x_asoc = { .owner = THIS_MODULE, .dai_link = palm27x_dai, .num_links = ARRAY_SIZE(palm27x_dai), .dapm_widgets = palm27x_dapm_widgets, .num_dapm_widgets = ARRAY_SIZE(palm27x_dapm_widgets), .dapm_routes = audio_map, .num_dapm_routes = ARRAY_SIZE(audio_map) }; static struct platform_device *palm27x_snd_device; static int palm27x_asoc_probe(struct platform_device *pdev) { int ret; Loading @@ -169,27 +160,18 @@ static int palm27x_asoc_probe(struct platform_device *pdev) hs_jack_gpios[0].gpio = ((struct palm27x_asoc_info *) (pdev->dev.platform_data))->jack_gpio; palm27x_snd_device = platform_device_alloc("soc-audio", -1); if (!palm27x_snd_device) return -ENOMEM; platform_set_drvdata(palm27x_snd_device, &palm27x_asoc); ret = platform_device_add(palm27x_snd_device); if (ret != 0) goto put_device; return 0; put_device: platform_device_put(palm27x_snd_device); palm27x_asoc.dev = &pdev->dev; ret = snd_soc_register_card(&palm27x_asoc); if (ret) dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", ret); return ret; } static int palm27x_asoc_remove(struct platform_device *pdev) { platform_device_unregister(palm27x_snd_device); snd_soc_unregister_card(&palm27x_asoc); return 0; } Loading