ASoC: fsi: tidyup sh_fsi_platform_info pointer
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Fri, 16 Nov 2012 09:16:52 +0000 (01:16 -0800)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Tue, 20 Nov 2012 06:11:21 +0000 (15:11 +0900)
Current FSI driver is requesting sh_fsi_platform_info pointer from platform,
and it didn't allowed NULL pointer.
This patch fixes it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/sh/fsi.c

index 913916a..3260d54 100644 (file)
@@ -1991,15 +1991,16 @@ static struct snd_soc_platform_driver fsi_soc_platform = {
 /*
  *             platform function
  */
-static void fsi_handler_init(struct fsi_priv *fsi)
+static void fsi_handler_init(struct fsi_priv *fsi,
+                            struct sh_fsi_port_info *info)
 {
        fsi->playback.handler   = &fsi_pio_push_handler; /* default PIO */
        fsi->playback.priv      = fsi;
        fsi->capture.handler    = &fsi_pio_pop_handler;  /* default PIO */
        fsi->capture.priv       = fsi;
 
-       if (fsi->info->tx_id) {
-               fsi->playback.slave.shdma_slave.slave_id = fsi->info->tx_id;
+       if (info->tx_id) {
+               fsi->playback.slave.shdma_slave.slave_id = info->tx_id;
                fsi->playback.handler = &fsi_dma_push_handler;
        }
 }
@@ -2009,11 +2010,16 @@ static int fsi_probe(struct platform_device *pdev)
        struct fsi_master *master;
        const struct platform_device_id *id_entry;
        struct sh_fsi_platform_info *info = pdev->dev.platform_data;
+       struct sh_fsi_port_info nul_info, *pinfo;
        struct fsi_priv *fsi;
        struct resource *res;
        unsigned int irq;
        int ret;
 
+       nul_info.flags  = 0;
+       nul_info.tx_id  = 0;
+       nul_info.rx_id  = 0;
+
        id_entry = pdev->id_entry;
        if (!id_entry) {
                dev_err(&pdev->dev, "unknown fsi device\n");
@@ -2046,11 +2052,12 @@ static int fsi_probe(struct platform_device *pdev)
        spin_lock_init(&master->lock);
 
        /* FSI A setting */
+       pinfo           = (info) ? &info->port_a : &nul_info;
        fsi             = &master->fsia;
        fsi->base       = master->base;
        fsi->master     = master;
-       fsi->info       = &info->port_a;
-       fsi_handler_init(fsi);
+       fsi->info       = pinfo;
+       fsi_handler_init(fsi, pinfo);
        ret = fsi_stream_probe(fsi, &pdev->dev);
        if (ret < 0) {
                dev_err(&pdev->dev, "FSIA stream probe failed\n");
@@ -2058,11 +2065,12 @@ static int fsi_probe(struct platform_device *pdev)
        }
 
        /* FSI B setting */
+       pinfo           = (info) ? &info->port_b : &nul_info;
        fsi             = &master->fsib;
        fsi->base       = master->base + 0x40;
        fsi->master     = master;
-       fsi->info       = &info->port_b;
-       fsi_handler_init(fsi);
+       fsi->info       = pinfo;
+       fsi_handler_init(fsi, pinfo);
        ret = fsi_stream_probe(fsi, &pdev->dev);
        if (ret < 0) {
                dev_err(&pdev->dev, "FSIB stream probe failed\n");