Commit 9666e27f authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Mark Brown

ASoC: samsung: h1940: turn into platform driver

Avoid machine specific headers by using a gpio lookup table
combined with a platform_driver for this board.
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarKrzysztof Kozlowski <krzk@kernel.org>
Link: https://lore.kernel.org/r/20200806182059.2431-24-krzk@kernel.orgSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 9123e3a7
...@@ -475,6 +475,22 @@ static struct gpiod_lookup_table h1940_mmc_gpio_table = { ...@@ -475,6 +475,22 @@ static struct gpiod_lookup_table h1940_mmc_gpio_table = {
}, },
}; };
static struct gpiod_lookup_table h1940_audio_gpio_table = {
.dev_id = "h1940-audio",
.table = {
GPIO_LOOKUP("H1940_LATCH",
H1940_LATCH_AUDIO_POWER - H1940_LATCH_GPIO(0),
"speaker-power", GPIO_ACTIVE_HIGH),
GPIO_LOOKUP("GPIOG", 4, "hp", GPIO_ACTIVE_HIGH),
{ },
},
};
static struct platform_device h1940_audio = {
.name = "h1940-audio",
.id = -1,
};
static struct pwm_lookup h1940_pwm_lookup[] = { static struct pwm_lookup h1940_pwm_lookup[] = {
PWM_LOOKUP("samsung-pwm", 0, "pwm-backlight", NULL, 36296, PWM_LOOKUP("samsung-pwm", 0, "pwm-backlight", NULL, 36296,
PWM_POLARITY_NORMAL), PWM_POLARITY_NORMAL),
...@@ -651,6 +667,7 @@ static struct platform_device *h1940_devices[] __initdata = { ...@@ -651,6 +667,7 @@ static struct platform_device *h1940_devices[] __initdata = {
&s3c_device_ts, &s3c_device_ts,
&power_supply, &power_supply,
&h1940_battery, &h1940_battery,
&h1940_audio,
}; };
static void __init h1940_map_io(void) static void __init h1940_map_io(void)
...@@ -690,6 +707,7 @@ static void __init h1940_init(void) ...@@ -690,6 +707,7 @@ static void __init h1940_init(void)
s3c24xx_fb_set_platdata(&h1940_fb_info); s3c24xx_fb_set_platdata(&h1940_fb_info);
gpiod_add_lookup_table(&h1940_mmc_gpio_table); gpiod_add_lookup_table(&h1940_mmc_gpio_table);
gpiod_add_lookup_table(&h1940_audio_gpio_table);
s3c24xx_mci_set_platdata(&h1940_mmc_cfg); s3c24xx_mci_set_platdata(&h1940_mmc_cfg);
s3c24xx_udc_set_platdata(&h1940_udc_cfg); s3c24xx_udc_set_platdata(&h1940_udc_cfg);
s3c24xx_ts_set_platdata(&h1940_ts_cfg); s3c24xx_ts_set_platdata(&h1940_ts_cfg);
......
...@@ -15,9 +15,6 @@ ...@@ -15,9 +15,6 @@
#include <sound/jack.h> #include <sound/jack.h>
#include "regs-iis.h" #include "regs-iis.h"
#include <asm/mach-types.h>
#include <mach/gpio-samsung.h>
#include "s3c24xx-i2s.h" #include "s3c24xx-i2s.h"
static const unsigned int rates[] = { static const unsigned int rates[] = {
...@@ -31,6 +28,8 @@ static const struct snd_pcm_hw_constraint_list hw_rates = { ...@@ -31,6 +28,8 @@ static const struct snd_pcm_hw_constraint_list hw_rates = {
.list = rates, .list = rates,
}; };
static struct gpio_desc *gpiod_speaker_power;
static struct snd_soc_jack hp_jack; static struct snd_soc_jack hp_jack;
static struct snd_soc_jack_pin hp_jack_pins[] = { static struct snd_soc_jack_pin hp_jack_pins[] = {
...@@ -47,7 +46,6 @@ static struct snd_soc_jack_pin hp_jack_pins[] = { ...@@ -47,7 +46,6 @@ static struct snd_soc_jack_pin hp_jack_pins[] = {
static struct snd_soc_jack_gpio hp_jack_gpios[] = { static struct snd_soc_jack_gpio hp_jack_gpios[] = {
{ {
.gpio = S3C2410_GPG(4),
.name = "hp-gpio", .name = "hp-gpio",
.report = SND_JACK_HEADPHONE, .report = SND_JACK_HEADPHONE,
.invert = 1, .invert = 1,
...@@ -123,9 +121,9 @@ static int h1940_spk_power(struct snd_soc_dapm_widget *w, ...@@ -123,9 +121,9 @@ static int h1940_spk_power(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *kcontrol, int event) struct snd_kcontrol *kcontrol, int event)
{ {
if (SND_SOC_DAPM_EVENT_ON(event)) if (SND_SOC_DAPM_EVENT_ON(event))
gpio_set_value(S3C_GPIO_END + 9, 1); gpiod_set_value(gpiod_speaker_power, 1);
else else
gpio_set_value(S3C_GPIO_END + 9, 0); gpiod_set_value(gpiod_speaker_power, 0);
return 0; return 0;
} }
...@@ -151,8 +149,6 @@ static const struct snd_soc_dapm_route audio_map[] = { ...@@ -151,8 +149,6 @@ static const struct snd_soc_dapm_route audio_map[] = {
{"VINM", NULL, "Mic Jack"}, {"VINM", NULL, "Mic Jack"},
}; };
static struct platform_device *s3c24xx_snd_device;
static int h1940_uda1380_init(struct snd_soc_pcm_runtime *rtd) static int h1940_uda1380_init(struct snd_soc_pcm_runtime *rtd)
{ {
snd_soc_card_jack_new(rtd->card, "Headphone Jack", SND_JACK_HEADPHONE, snd_soc_card_jack_new(rtd->card, "Headphone Jack", SND_JACK_HEADPHONE,
...@@ -194,55 +190,34 @@ static struct snd_soc_card h1940_asoc = { ...@@ -194,55 +190,34 @@ static struct snd_soc_card h1940_asoc = {
.num_dapm_routes = ARRAY_SIZE(audio_map), .num_dapm_routes = ARRAY_SIZE(audio_map),
}; };
static int __init h1940_init(void) static int h1940_probe(struct platform_device *pdev)
{ {
int ret; struct device *dev = &pdev->dev;
if (!machine_is_h1940()) h1940_asoc.dev = dev;
return -ENODEV; hp_jack_gpios[0].gpiod_dev = dev;
gpiod_speaker_power = devm_gpiod_get(&pdev->dev, "speaker-power",
GPIOD_OUT_LOW);
/* configure some gpios */ if (IS_ERR(gpiod_speaker_power)) {
ret = gpio_request(S3C_GPIO_END + 9, "speaker-power"); dev_err(dev, "Could not get gpio\n");
if (ret) return PTR_ERR(gpiod_speaker_power);
goto err_out;
ret = gpio_direction_output(S3C_GPIO_END + 9, 0);
if (ret)
goto err_gpio;
s3c24xx_snd_device = platform_device_alloc("soc-audio", -1);
if (!s3c24xx_snd_device) {
ret = -ENOMEM;
goto err_gpio;
} }
platform_set_drvdata(s3c24xx_snd_device, &h1940_asoc); return devm_snd_soc_register_card(dev, &h1940_asoc);
ret = platform_device_add(s3c24xx_snd_device);
if (ret)
goto err_plat;
return 0;
err_plat:
platform_device_put(s3c24xx_snd_device);
err_gpio:
gpio_free(S3C_GPIO_END + 9);
err_out:
return ret;
}
static void __exit h1940_exit(void)
{
platform_device_unregister(s3c24xx_snd_device);
gpio_free(S3C_GPIO_END + 9);
} }
module_init(h1940_init); static struct platform_driver h1940_audio_driver = {
module_exit(h1940_exit); .driver = {
.name = "h1940-audio",
.pm = &snd_soc_pm_ops,
},
.probe = h1940_probe,
};
module_platform_driver(h1940_audio_driver);
/* Module information */ /* Module information */
MODULE_AUTHOR("Arnaud Patard, Vasily Khoruzhick"); MODULE_AUTHOR("Arnaud Patard, Vasily Khoruzhick");
MODULE_DESCRIPTION("ALSA SoC H1940"); MODULE_DESCRIPTION("ALSA SoC H1940");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS("platform:h1940-audio");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment