spi: fix spi_imx probe oopsing

Corrects spi_imx driver oops during initialization/probing: can't use
drv_data before it's allocated.

Signed-off-by: Julien Boibessot <julien.boibessot@armadeus.com>
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by Julien Boibessot and committed by Linus Torvalds 6a010b56 7ef9964e

+13 -12
+13 -12
drivers/spi/spi_imx.c
··· 1456 struct device *dev = &pdev->dev; 1457 struct spi_imx_master *platform_info; 1458 struct spi_master *master; 1459 - struct driver_data *drv_data = NULL; 1460 struct resource *res; 1461 int irq, status = 0; 1462 ··· 1466 status = -ENODEV; 1467 goto err_no_pdata; 1468 } 1469 - 1470 - drv_data->clk = clk_get(&pdev->dev, "perclk2"); 1471 - if (IS_ERR(drv_data->clk)) { 1472 - dev_err(&pdev->dev, "probe - cannot get get\n"); 1473 - status = PTR_ERR(drv_data->clk); 1474 - goto err_no_clk; 1475 - } 1476 - clk_enable(drv_data->clk); 1477 1478 /* Allocate master with space for drv_data */ 1479 master = spi_alloc_master(dev, sizeof(struct driver_data)); ··· 1486 master->transfer = transfer; 1487 1488 drv_data->dummy_dma_buf = SPI_DUMMY_u32; 1489 1490 /* Find and map resources */ 1491 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ··· 1630 kfree(drv_data->ioarea); 1631 1632 err_no_iores: 1633 spi_master_put(master); 1634 1635 err_no_pdata: 1636 - clk_disable(drv_data->clk); 1637 - clk_put(drv_data->clk); 1638 - err_no_clk: 1639 err_no_mem: 1640 return status; 1641 }
··· 1456 struct device *dev = &pdev->dev; 1457 struct spi_imx_master *platform_info; 1458 struct spi_master *master; 1459 + struct driver_data *drv_data; 1460 struct resource *res; 1461 int irq, status = 0; 1462 ··· 1466 status = -ENODEV; 1467 goto err_no_pdata; 1468 } 1469 1470 /* Allocate master with space for drv_data */ 1471 master = spi_alloc_master(dev, sizeof(struct driver_data)); ··· 1494 master->transfer = transfer; 1495 1496 drv_data->dummy_dma_buf = SPI_DUMMY_u32; 1497 + 1498 + drv_data->clk = clk_get(&pdev->dev, "perclk2"); 1499 + if (IS_ERR(drv_data->clk)) { 1500 + dev_err(&pdev->dev, "probe - cannot get clock\n"); 1501 + status = PTR_ERR(drv_data->clk); 1502 + goto err_no_clk; 1503 + } 1504 + clk_enable(drv_data->clk); 1505 1506 /* Find and map resources */ 1507 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ··· 1630 kfree(drv_data->ioarea); 1631 1632 err_no_iores: 1633 + clk_disable(drv_data->clk); 1634 + clk_put(drv_data->clk); 1635 + 1636 + err_no_clk: 1637 spi_master_put(master); 1638 1639 err_no_pdata: 1640 err_no_mem: 1641 return status; 1642 }