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 1456 struct device *dev = &pdev->dev; 1457 1457 struct spi_imx_master *platform_info; 1458 1458 struct spi_master *master; 1459 - struct driver_data *drv_data = NULL; 1459 + struct driver_data *drv_data; 1460 1460 struct resource *res; 1461 1461 int irq, status = 0; 1462 1462 ··· 1466 1466 status = -ENODEV; 1467 1467 goto err_no_pdata; 1468 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 1469 1478 1470 /* Allocate master with space for drv_data */ 1479 1471 master = spi_alloc_master(dev, sizeof(struct driver_data)); ··· 1486 1494 master->transfer = transfer; 1487 1495 1488 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); 1489 1505 1490 1506 /* Find and map resources */ 1491 1507 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ··· 1630 1630 kfree(drv_data->ioarea); 1631 1631 1632 1632 err_no_iores: 1633 + clk_disable(drv_data->clk); 1634 + clk_put(drv_data->clk); 1635 + 1636 + err_no_clk: 1633 1637 spi_master_put(master); 1634 1638 1635 1639 err_no_pdata: 1636 - clk_disable(drv_data->clk); 1637 - clk_put(drv_data->clk); 1638 - err_no_clk: 1639 1640 err_no_mem: 1640 1641 return status; 1641 1642 }