|
@@ -1267,7 +1267,7 @@ mcr20a_probe(struct spi_device *spi)
|
|
|
ret = mcr20a_get_platform_data(spi, pdata);
|
|
|
if (ret < 0) {
|
|
|
dev_crit(&spi->dev, "mcr20a_get_platform_data failed.\n");
|
|
|
- return ret;
|
|
|
+ goto free_pdata;
|
|
|
}
|
|
|
|
|
|
/* init reset gpio */
|
|
@@ -1275,7 +1275,7 @@ mcr20a_probe(struct spi_device *spi)
|
|
|
ret = devm_gpio_request_one(&spi->dev, pdata->rst_gpio,
|
|
|
GPIOF_OUT_INIT_HIGH, "reset");
|
|
|
if (ret)
|
|
|
- return ret;
|
|
|
+ goto free_pdata;
|
|
|
}
|
|
|
|
|
|
/* reset mcr20a */
|
|
@@ -1291,7 +1291,8 @@ mcr20a_probe(struct spi_device *spi)
|
|
|
hw = ieee802154_alloc_hw(sizeof(*lp), &mcr20a_hw_ops);
|
|
|
if (!hw) {
|
|
|
dev_crit(&spi->dev, "ieee802154_alloc_hw failed\n");
|
|
|
- return -ENOMEM;
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto free_pdata;
|
|
|
}
|
|
|
|
|
|
/* init mcr20a local data */
|
|
@@ -1366,6 +1367,8 @@ mcr20a_probe(struct spi_device *spi)
|
|
|
|
|
|
free_dev:
|
|
|
ieee802154_free_hw(lp->hw);
|
|
|
+free_pdata:
|
|
|
+ kfree(pdata);
|
|
|
|
|
|
return ret;
|
|
|
}
|