Lines Matching +full:pl353 +full:- +full:nand +full:- +full:r2p1
1 // SPDX-License-Identifier: GPL-2.0
3 * ARM PL353 SMC driver
5 * Copyright (C) 2012 - 2018 Xilinx, Inc
18 * struct pl353_smc_data - Private smc driver structure
31 clk_disable(pl353_smc->memclk); in pl353_smc_suspend()
32 clk_disable(pl353_smc->aclk); in pl353_smc_suspend()
42 ret = clk_enable(pl353_smc->aclk); in pl353_smc_resume()
48 ret = clk_enable(pl353_smc->memclk); in pl353_smc_resume()
51 clk_disable(pl353_smc->aclk); in pl353_smc_resume()
63 .compatible = "cfi-flash"
66 .compatible = "arm,pl353-nand-r2p1",
73 struct device_node *of_node = adev->dev.of_node; in pl353_smc_probe()
79 pl353_smc = devm_kzalloc(&adev->dev, sizeof(*pl353_smc), GFP_KERNEL); in pl353_smc_probe()
81 return -ENOMEM; in pl353_smc_probe()
83 pl353_smc->aclk = devm_clk_get(&adev->dev, "apb_pclk"); in pl353_smc_probe()
84 if (IS_ERR(pl353_smc->aclk)) { in pl353_smc_probe()
85 dev_err(&adev->dev, "aclk clock not found.\n"); in pl353_smc_probe()
86 return PTR_ERR(pl353_smc->aclk); in pl353_smc_probe()
89 pl353_smc->memclk = devm_clk_get(&adev->dev, "memclk"); in pl353_smc_probe()
90 if (IS_ERR(pl353_smc->memclk)) { in pl353_smc_probe()
91 dev_err(&adev->dev, "memclk clock not found.\n"); in pl353_smc_probe()
92 return PTR_ERR(pl353_smc->memclk); in pl353_smc_probe()
95 err = clk_prepare_enable(pl353_smc->aclk); in pl353_smc_probe()
97 dev_err(&adev->dev, "Unable to enable AXI clock.\n"); in pl353_smc_probe()
101 err = clk_prepare_enable(pl353_smc->memclk); in pl353_smc_probe()
103 dev_err(&adev->dev, "Unable to enable memory clock.\n"); in pl353_smc_probe()
113 dev_warn(&adev->dev, "unsupported child node\n"); in pl353_smc_probe()
119 err = -ENODEV; in pl353_smc_probe()
120 dev_err(&adev->dev, "no matching children\n"); in pl353_smc_probe()
124 of_platform_device_create(child, NULL, &adev->dev); in pl353_smc_probe()
129 clk_disable_unprepare(pl353_smc->memclk); in pl353_smc_probe()
131 clk_disable_unprepare(pl353_smc->aclk); in pl353_smc_probe()
140 clk_disable_unprepare(pl353_smc->memclk); in pl353_smc_remove()
141 clk_disable_unprepare(pl353_smc->aclk); in pl353_smc_remove()
156 .name = "pl353-smc",
167 MODULE_DESCRIPTION("ARM PL353 SMC Driver");