diff options
| -rw-r--r-- | drivers/crypto/picoxcell_crypto.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/drivers/crypto/picoxcell_crypto.c b/drivers/crypto/picoxcell_crypto.c index 5a6dc53b2b9d..4ef52c9d72fc 100644 --- a/drivers/crypto/picoxcell_crypto.c +++ b/drivers/crypto/picoxcell_crypto.c | |||
| @@ -1618,7 +1618,7 @@ MODULE_DEVICE_TABLE(of, spacc_of_id_table); | |||
| 1618 | 1618 | ||
| 1619 | static int spacc_probe(struct platform_device *pdev) | 1619 | static int spacc_probe(struct platform_device *pdev) |
| 1620 | { | 1620 | { |
| 1621 | int i, err, ret = -EINVAL; | 1621 | int i, err, ret; |
| 1622 | struct resource *mem, *irq; | 1622 | struct resource *mem, *irq; |
| 1623 | struct device_node *np = pdev->dev.of_node; | 1623 | struct device_node *np = pdev->dev.of_node; |
| 1624 | struct spacc_engine *engine = devm_kzalloc(&pdev->dev, sizeof(*engine), | 1624 | struct spacc_engine *engine = devm_kzalloc(&pdev->dev, sizeof(*engine), |
| @@ -1679,22 +1679,18 @@ static int spacc_probe(struct platform_device *pdev) | |||
| 1679 | engine->clk = clk_get(&pdev->dev, "ref"); | 1679 | engine->clk = clk_get(&pdev->dev, "ref"); |
| 1680 | if (IS_ERR(engine->clk)) { | 1680 | if (IS_ERR(engine->clk)) { |
| 1681 | dev_info(&pdev->dev, "clk unavailable\n"); | 1681 | dev_info(&pdev->dev, "clk unavailable\n"); |
| 1682 | device_remove_file(&pdev->dev, &dev_attr_stat_irq_thresh); | ||
| 1683 | return PTR_ERR(engine->clk); | 1682 | return PTR_ERR(engine->clk); |
| 1684 | } | 1683 | } |
| 1685 | 1684 | ||
| 1686 | if (clk_prepare_enable(engine->clk)) { | 1685 | if (clk_prepare_enable(engine->clk)) { |
| 1687 | dev_info(&pdev->dev, "unable to prepare/enable clk\n"); | 1686 | dev_info(&pdev->dev, "unable to prepare/enable clk\n"); |
| 1688 | clk_put(engine->clk); | 1687 | ret = -EIO; |
| 1689 | return -EIO; | 1688 | goto err_clk_put; |
| 1690 | } | 1689 | } |
| 1691 | 1690 | ||
| 1692 | err = device_create_file(&pdev->dev, &dev_attr_stat_irq_thresh); | 1691 | ret = device_create_file(&pdev->dev, &dev_attr_stat_irq_thresh); |
| 1693 | if (err) { | 1692 | if (ret) |
| 1694 | clk_disable_unprepare(engine->clk); | 1693 | goto err_clk_disable; |
| 1695 | clk_put(engine->clk); | ||
| 1696 | return err; | ||
| 1697 | } | ||
| 1698 | 1694 | ||
| 1699 | 1695 | ||
| 1700 | /* | 1696 | /* |
| @@ -1725,6 +1721,7 @@ static int spacc_probe(struct platform_device *pdev) | |||
| 1725 | 1721 | ||
| 1726 | platform_set_drvdata(pdev, engine); | 1722 | platform_set_drvdata(pdev, engine); |
| 1727 | 1723 | ||
| 1724 | ret = -EINVAL; | ||
| 1728 | INIT_LIST_HEAD(&engine->registered_algs); | 1725 | INIT_LIST_HEAD(&engine->registered_algs); |
| 1729 | for (i = 0; i < engine->num_algs; ++i) { | 1726 | for (i = 0; i < engine->num_algs; ++i) { |
| 1730 | engine->algs[i].engine = engine; | 1727 | engine->algs[i].engine = engine; |
| @@ -1759,6 +1756,16 @@ static int spacc_probe(struct platform_device *pdev) | |||
| 1759 | engine->aeads[i].alg.base.cra_name); | 1756 | engine->aeads[i].alg.base.cra_name); |
| 1760 | } | 1757 | } |
| 1761 | 1758 | ||
| 1759 | if (!ret) | ||
| 1760 | return 0; | ||
| 1761 | |||
| 1762 | del_timer_sync(&engine->packet_timeout); | ||
| 1763 | device_remove_file(&pdev->dev, &dev_attr_stat_irq_thresh); | ||
| 1764 | err_clk_disable: | ||
| 1765 | clk_disable_unprepare(engine->clk); | ||
| 1766 | err_clk_put: | ||
| 1767 | clk_put(engine->clk); | ||
| 1768 | |||
| 1762 | return ret; | 1769 | return ret; |
| 1763 | } | 1770 | } |
| 1764 | 1771 | ||
