at91sam9n12.c (9b031c86506cef9acae45e61339fcf9deaabb793) | at91sam9n12.c (153bc1c66a8814e621ca0483098ac722be860aaf) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2#include <linux/clk-provider.h> 3#include <linux/mfd/syscon.h> 4#include <linux/slab.h> 5 6#include <dt-bindings/clock/at91.h> 7 8#include "pmc.h" --- 110 unchanged lines hidden (view full) --- 119 120 slck_name = of_clk_get_parent_name(np, i); 121 122 i = of_property_match_string(np, "clock-names", "main_xtal"); 123 if (i < 0) 124 return; 125 mainxtal_name = of_clk_get_parent_name(np, i); 126 | 1// SPDX-License-Identifier: GPL-2.0 2#include <linux/clk-provider.h> 3#include <linux/mfd/syscon.h> 4#include <linux/slab.h> 5 6#include <dt-bindings/clock/at91.h> 7 8#include "pmc.h" --- 110 unchanged lines hidden (view full) --- 119 120 slck_name = of_clk_get_parent_name(np, i); 121 122 i = of_property_match_string(np, "clock-names", "main_xtal"); 123 if (i < 0) 124 return; 125 mainxtal_name = of_clk_get_parent_name(np, i); 126 |
127 regmap = syscon_node_to_regmap(np); | 127 regmap = device_node_to_regmap(np); |
128 if (IS_ERR(regmap)) 129 return; 130 | 128 if (IS_ERR(regmap)) 129 return; 130 |
131 at91sam9n12_pmc = pmc_data_allocate(PMC_MAIN + 1, 132 nck(at91sam9n12_systemck), 31, 0); | 131 at91sam9n12_pmc = pmc_data_allocate(PMC_PLLBCK + 1, 132 nck(at91sam9n12_systemck), 31, 0, 2); |
133 if (!at91sam9n12_pmc) 134 return; 135 136 hw = at91_clk_register_main_rc_osc(regmap, "main_rc_osc", 12000000, 137 50000000); 138 if (IS_ERR(hw)) 139 goto err_free; 140 --- 16 unchanged lines hidden (view full) --- 157 &at91rm9200_pll_layout, &plla_characteristics); 158 if (IS_ERR(hw)) 159 goto err_free; 160 161 hw = at91_clk_register_plldiv(regmap, "plladivck", "pllack"); 162 if (IS_ERR(hw)) 163 goto err_free; 164 | 133 if (!at91sam9n12_pmc) 134 return; 135 136 hw = at91_clk_register_main_rc_osc(regmap, "main_rc_osc", 12000000, 137 50000000); 138 if (IS_ERR(hw)) 139 goto err_free; 140 --- 16 unchanged lines hidden (view full) --- 157 &at91rm9200_pll_layout, &plla_characteristics); 158 if (IS_ERR(hw)) 159 goto err_free; 160 161 hw = at91_clk_register_plldiv(regmap, "plladivck", "pllack"); 162 if (IS_ERR(hw)) 163 goto err_free; 164 |
165 at91sam9n12_pmc->chws[PMC_PLLACK] = hw; 166 |
|
165 hw = at91_clk_register_pll(regmap, "pllbck", "mainck", 1, 166 &at91rm9200_pll_layout, &pllb_characteristics); 167 if (IS_ERR(hw)) 168 goto err_free; 169 | 167 hw = at91_clk_register_pll(regmap, "pllbck", "mainck", 1, 168 &at91rm9200_pll_layout, &pllb_characteristics); 169 if (IS_ERR(hw)) 170 goto err_free; 171 |
172 at91sam9n12_pmc->chws[PMC_PLLBCK] = hw; 173 |
|
170 parent_names[0] = slck_name; 171 parent_names[1] = "mainck"; 172 parent_names[2] = "plladivck"; 173 parent_names[3] = "pllbck"; 174 hw = at91_clk_register_master(regmap, "masterck", 4, parent_names, 175 &at91sam9x5_master_layout, 176 &mck_characteristics); 177 if (IS_ERR(hw)) --- 15 unchanged lines hidden (view full) --- 193 194 snprintf(name, sizeof(name), "prog%d", i); 195 196 hw = at91_clk_register_programmable(regmap, name, 197 parent_names, 5, i, 198 &at91sam9x5_programmable_layout); 199 if (IS_ERR(hw)) 200 goto err_free; | 174 parent_names[0] = slck_name; 175 parent_names[1] = "mainck"; 176 parent_names[2] = "plladivck"; 177 parent_names[3] = "pllbck"; 178 hw = at91_clk_register_master(regmap, "masterck", 4, parent_names, 179 &at91sam9x5_master_layout, 180 &mck_characteristics); 181 if (IS_ERR(hw)) --- 15 unchanged lines hidden (view full) --- 197 198 snprintf(name, sizeof(name), "prog%d", i); 199 200 hw = at91_clk_register_programmable(regmap, name, 201 parent_names, 5, i, 202 &at91sam9x5_programmable_layout); 203 if (IS_ERR(hw)) 204 goto err_free; |
205 206 at91sam9n12_pmc->pchws[i] = hw; |
|
201 } 202 203 for (i = 0; i < ARRAY_SIZE(at91sam9n12_systemck); i++) { 204 hw = at91_clk_register_system(regmap, at91sam9n12_systemck[i].n, 205 at91sam9n12_systemck[i].p, 206 at91sam9n12_systemck[i].id); 207 if (IS_ERR(hw)) 208 goto err_free; --- 14 unchanged lines hidden (view full) --- 223 at91sam9n12_pmc->phws[at91sam9n12_periphck[i].id] = hw; 224 } 225 226 of_clk_add_hw_provider(np, of_clk_hw_pmc_get, at91sam9n12_pmc); 227 228 return; 229 230err_free: | 207 } 208 209 for (i = 0; i < ARRAY_SIZE(at91sam9n12_systemck); i++) { 210 hw = at91_clk_register_system(regmap, at91sam9n12_systemck[i].n, 211 at91sam9n12_systemck[i].p, 212 at91sam9n12_systemck[i].id); 213 if (IS_ERR(hw)) 214 goto err_free; --- 14 unchanged lines hidden (view full) --- 229 at91sam9n12_pmc->phws[at91sam9n12_periphck[i].id] = hw; 230 } 231 232 of_clk_add_hw_provider(np, of_clk_hw_pmc_get, at91sam9n12_pmc); 233 234 return; 235 236err_free: |
231 pmc_data_free(at91sam9n12_pmc); | 237 kfree(at91sam9n12_pmc); |
232} 233/* 234 * The TCB is used as the clocksource so its clock is needed early. This means 235 * this can't be a platform driver. 236 */ 237CLK_OF_DECLARE_DRIVER(at91sam9n12_pmc, "atmel,at91sam9n12-pmc", 238 at91sam9n12_pmc_setup); | 238} 239/* 240 * The TCB is used as the clocksource so its clock is needed early. This means 241 * this can't be a platform driver. 242 */ 243CLK_OF_DECLARE_DRIVER(at91sam9n12_pmc, "atmel,at91sam9n12-pmc", 244 at91sam9n12_pmc_setup); |