lkml.org 
[lkml]   [2019]   [Oct]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 19/36] ARM: s3c: rx1950: turn into platform driver
    Date
    Avoid machine specific headers by using a gpio lookup table
    combined with a platform_driver for this board.

    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    ---
    arch/arm/mach-s3c24xx/mach-rx1950.c | 16 +++++++
    sound/soc/samsung/rx1950_uda1380.c | 72 +++++++++--------------------
    2 files changed, 39 insertions(+), 49 deletions(-)

    diff --git a/arch/arm/mach-s3c24xx/mach-rx1950.c b/arch/arm/mach-s3c24xx/mach-rx1950.c
    index 29f9b345a531..9f3b0f18cd36 100644
    --- a/arch/arm/mach-s3c24xx/mach-rx1950.c
    +++ b/arch/arm/mach-s3c24xx/mach-rx1950.c
    @@ -724,6 +724,20 @@ static struct i2c_board_info rx1950_i2c_devices[] = {
    },
    };

    +static struct gpiod_lookup_table rx1950_audio_gpio_table = {
    + .dev_id = "rx1950-audio",
    + .table = {
    + GPIO_LOOKUP("GPIOG", 12, "hp-gpio", GPIO_ACTIVE_HIGH),
    + GPIO_LOOKUP("GPIOA", 1, "speaker-power", GPIO_ACTIVE_HIGH),
    + { },
    + },
    +};
    +
    +static struct platform_device rx1950_audio = {
    + .name = "rx1950-audio",
    + .id = -1,
    +};
    +
    static struct platform_device *rx1950_devices[] __initdata = {
    &s3c2410_device_dclk,
    &s3c_device_lcd,
    @@ -742,6 +756,7 @@ static struct platform_device *rx1950_devices[] __initdata = {
    &power_supply,
    &rx1950_battery,
    &rx1950_leds,
    + &rx1950_audio,
    };

    static void __init rx1950_map_io(void)
    @@ -809,6 +824,7 @@ static void __init rx1950_init_machine(void)
    gpio_direction_output(S3C2410_GPJ(6), 0);

    pwm_add_table(rx1950_pwm_lookup, ARRAY_SIZE(rx1950_pwm_lookup));
    + gpiod_add_lookup_table(&rx1950_audio_gpio_table);
    platform_add_devices(rx1950_devices, ARRAY_SIZE(rx1950_devices));

    i2c_register_board_info(0, rx1950_i2c_devices,
    diff --git a/sound/soc/samsung/rx1950_uda1380.c b/sound/soc/samsung/rx1950_uda1380.c
    index 4b247e91ae5b..cf96eaaf6b4e 100644
    --- a/sound/soc/samsung/rx1950_uda1380.c
    +++ b/sound/soc/samsung/rx1950_uda1380.c
    @@ -12,16 +12,13 @@
    // Vasily Khoruzhick <anarsoul@gmail.com>

    #include <linux/types.h>
    -#include <linux/gpio.h>
    +#include <linux/gpio/consumer.h>
    #include <linux/module.h>

    #include <sound/soc.h>
    #include <sound/jack.h>

    -#include <mach/gpio-samsung.h>
    #include "regs-iis.h"
    -#include <asm/mach-types.h>
    -
    #include "s3c24xx-i2s.h"

    static int rx1950_uda1380_init(struct snd_soc_pcm_runtime *rtd);
    @@ -58,7 +55,6 @@ static struct snd_soc_jack_pin hp_jack_pins[] = {

    static struct snd_soc_jack_gpio hp_jack_gpios[] = {
    [0] = {
    - .gpio = S3C2410_GPG(12),
    .name = "hp-gpio",
    .report = SND_JACK_HEADPHONE,
    .invert = 1,
    @@ -123,8 +119,6 @@ static struct snd_soc_card rx1950_asoc = {
    .num_dapm_routes = ARRAY_SIZE(audio_map),
    };

    -static struct platform_device *s3c24xx_snd_device;
    -
    static int rx1950_startup(struct snd_pcm_substream *substream)
    {
    struct snd_pcm_runtime *runtime = substream->runtime;
    @@ -134,13 +128,15 @@ static int rx1950_startup(struct snd_pcm_substream *substream)
    &hw_rates);
    }

    +struct gpio_desc *gpiod_speaker_power;
    +
    static int rx1950_spk_power(struct snd_soc_dapm_widget *w,
    struct snd_kcontrol *kcontrol, int event)
    {
    if (SND_SOC_DAPM_EVENT_ON(event))
    - gpio_set_value(S3C2410_GPA(1), 1);
    + gpiod_set_value(gpiod_speaker_power, 1);
    else
    - gpio_set_value(S3C2410_GPA(1), 0);
    + gpiod_set_value(gpiod_speaker_power, 0);

    return 0;
    }
    @@ -214,57 +210,35 @@ static int rx1950_uda1380_init(struct snd_soc_pcm_runtime *rtd)
    return 0;
    }

    -static int __init rx1950_init(void)
    +static int rx1950_probe(struct platform_device *pdev)
    {
    - int ret;
    -
    - if (!machine_is_rx1950())
    - return -ENODEV;
    + struct device *dev = &pdev->dev;

    /* configure some gpios */
    - ret = gpio_request(S3C2410_GPA(1), "speaker-power");
    - if (ret)
    - goto err_gpio;
    -
    - ret = gpio_direction_output(S3C2410_GPA(1), 0);
    - if (ret)
    - goto err_gpio_conf;
    -
    - s3c24xx_snd_device = platform_device_alloc("soc-audio", -1);
    - if (!s3c24xx_snd_device) {
    - ret = -ENOMEM;
    - goto err_plat_alloc;
    - }
    -
    - platform_set_drvdata(s3c24xx_snd_device, &rx1950_asoc);
    - ret = platform_device_add(s3c24xx_snd_device);
    -
    - if (ret) {
    - platform_device_put(s3c24xx_snd_device);
    - goto err_plat_add;
    + gpiod_speaker_power = devm_gpiod_get(dev, "speaker-power", GPIOD_OUT_LOW);
    + if (IS_ERR(gpiod_speaker_power)) {
    + dev_err(dev, "cannot get gpio\n");
    + return PTR_ERR(gpiod_speaker_power);
    }

    - return 0;
    -
    -err_plat_add:
    -err_plat_alloc:
    -err_gpio_conf:
    - gpio_free(S3C2410_GPA(1));
    + hp_jack_gpios[0].gpiod_dev = dev;
    + rx1950_asoc.dev = dev;

    -err_gpio:
    - return ret;
    + return devm_snd_soc_register_card(dev, &rx1950_asoc);
    }

    -static void __exit rx1950_exit(void)
    -{
    - platform_device_unregister(s3c24xx_snd_device);
    - gpio_free(S3C2410_GPA(1));
    -}
    +struct platform_driver rx1950_audio = {
    + .driver = {
    + .name = "rx1950-audio",
    + .pm = &snd_soc_pm_ops,
    + },
    + .probe = rx1950_probe,
    +};

    -module_init(rx1950_init);
    -module_exit(rx1950_exit);
    +module_platform_driver(rx1950_audio);

    /* Module information */
    MODULE_AUTHOR("Vasily Khoruzhick");
    MODULE_DESCRIPTION("ALSA SoC RX1950");
    MODULE_LICENSE("GPL");
    +MODULE_ALIAS("platform:rx1950-audio");
    --
    2.20.0
    \
     
     \ /
      Last update: 2019-10-10 22:47    [W:7.099 / U:0.132 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site