Skip to content

Commit

Permalink
ASoC: ams-delta: Convert to use snd_soc_register_card()
Browse files Browse the repository at this point in the history
The old method of registering with the ASoC core by creating a
"soc-audio" platform device no longer works for Amstrad Delta sound card
after recent changes to drvdata handling (commit
0998d06, 'device-core: Ensure drvdata =
NULL when no driver is bound'.

Use snd_soc_register_card() method instead, as suggested by the ASoC
core generated warning message, and move both the card and codec
platform device registration to the arch board file where those belong.

Created and tested against linux-3.6-rc5.

Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl>
Acked-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
  • Loading branch information
Janusz Krzysztofik authored and Mark Brown committed Oct 4, 2012
1 parent 68214d9 commit b764de2
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 33 deletions.
12 changes: 12 additions & 0 deletions arch/arm/mach-omap1/board-ams-delta.c
Original file line number Diff line number Diff line change
Expand Up @@ -444,16 +444,28 @@ static struct omap1_cam_platform_data ams_delta_camera_platform_data = {
.lclk_khz_max = 1334, /* results in 5fps CIF, 10fps QCIF */
};

static struct platform_device ams_delta_audio_device = {
.name = "ams-delta-audio",
.id = -1,
};

static struct platform_device cx20442_codec_device = {
.name = "cx20442-codec",
.id = -1,
};

static struct platform_device *ams_delta_devices[] __initdata = {
&latch1_gpio_device,
&latch2_gpio_device,
&ams_delta_kp_device,
&ams_delta_camera_device,
&ams_delta_audio_device,
};

static struct platform_device *late_devices[] __initdata = {
&ams_delta_nand_device,
&ams_delta_lcd_device,
&cx20442_codec_device,
};

static void __init ams_delta_init(void)
Expand Down
63 changes: 30 additions & 33 deletions sound/soc/omap/ams-delta.c
Original file line number Diff line number Diff line change
Expand Up @@ -575,56 +575,53 @@ static struct snd_soc_card ams_delta_audio_card = {
};

/* Module init/exit */
static struct platform_device *ams_delta_audio_platform_device;
static struct platform_device *cx20442_platform_device;

static int __init ams_delta_module_init(void)
static __devinit int ams_delta_probe(struct platform_device *pdev)
{
struct snd_soc_card *card = &ams_delta_audio_card;
int ret;

if (!(machine_is_ams_delta()))
return -ENODEV;

ams_delta_audio_platform_device =
platform_device_alloc("soc-audio", -1);
if (!ams_delta_audio_platform_device)
return -ENOMEM;
card->dev = &pdev->dev;

platform_set_drvdata(ams_delta_audio_platform_device,
&ams_delta_audio_card);

ret = platform_device_add(ams_delta_audio_platform_device);
if (ret)
goto err;

/*
* Codec platform device could be registered from elsewhere (board?),
* but I do it here as it makes sense only if used with the card.
*/
cx20442_platform_device =
platform_device_register_simple("cx20442-codec", -1, NULL, 0);
ret = snd_soc_register_card(card);
if (ret) {
dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", ret);
card->dev = NULL;
return ret;
}
return 0;
err:
platform_device_put(ams_delta_audio_platform_device);
return ret;
}
late_initcall(ams_delta_module_init);

static void __exit ams_delta_module_exit(void)
static int __devexit ams_delta_remove(struct platform_device *pdev)
{
struct snd_soc_card *card = platform_get_drvdata(pdev);

if (tty_unregister_ldisc(N_V253) != 0)
dev_warn(&ams_delta_audio_platform_device->dev,
dev_warn(&pdev->dev,
"failed to unregister V253 line discipline\n");

snd_soc_jack_free_gpios(&ams_delta_hook_switch,
ARRAY_SIZE(ams_delta_hook_switch_gpios),
ams_delta_hook_switch_gpios);

platform_device_unregister(cx20442_platform_device);
platform_device_unregister(ams_delta_audio_platform_device);
snd_soc_unregister_card(card);
card->dev = NULL;
return 0;
}
module_exit(ams_delta_module_exit);

#define DRV_NAME "ams-delta-audio"

static struct platform_driver ams_delta_driver = {
.driver = {
.name = DRV_NAME,
.owner = THIS_MODULE,
},
.probe = ams_delta_probe,
.remove = __devexit_p(ams_delta_remove),
};

module_platform_driver(ams_delta_driver);

MODULE_AUTHOR("Janusz Krzysztofik <jkrzyszt@tis.icnet.pl>");
MODULE_DESCRIPTION("ALSA SoC driver for Amstrad E3 (Delta) videophone");
MODULE_LICENSE("GPL");
MODULE_ALIAS("platform:" DRV_NAME);

0 comments on commit b764de2

Please sign in to comment.