sam9x60.c (9b031c86506cef9acae45e61339fcf9deaabb793) | sam9x60.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" --- 164 unchanged lines hidden (view full) --- 173 174 md_slck_name = of_clk_get_parent_name(np, i); 175 176 i = of_property_match_string(np, "clock-names", "main_xtal"); 177 if (i < 0) 178 return; 179 mainxtal_name = of_clk_get_parent_name(np, i); 180 | 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" --- 164 unchanged lines hidden (view full) --- 173 174 md_slck_name = of_clk_get_parent_name(np, i); 175 176 i = of_property_match_string(np, "clock-names", "main_xtal"); 177 if (i < 0) 178 return; 179 mainxtal_name = of_clk_get_parent_name(np, i); 180 |
181 regmap = syscon_node_to_regmap(np); | 181 regmap = device_node_to_regmap(np); |
182 if (IS_ERR(regmap)) 183 return; 184 | 182 if (IS_ERR(regmap)) 183 return; 184 |
185 sam9x60_pmc = pmc_data_allocate(PMC_MAIN + 1, | 185 sam9x60_pmc = pmc_data_allocate(PMC_PLLACK + 1, |
186 nck(sam9x60_systemck), 187 nck(sam9x60_periphck), | 186 nck(sam9x60_systemck), 187 nck(sam9x60_periphck), |
188 nck(sam9x60_gck)); | 188 nck(sam9x60_gck), 8); |
189 if (!sam9x60_pmc) 190 return; 191 192 hw = at91_clk_register_main_rc_osc(regmap, "main_rc_osc", 24000000, 193 50000000); 194 if (IS_ERR(hw)) 195 goto err_free; 196 --- 12 unchanged lines hidden (view full) --- 209 210 sam9x60_pmc->chws[PMC_MAIN] = hw; 211 212 hw = sam9x60_clk_register_pll(regmap, &pmc_pll_lock, "pllack", 213 "mainck", 0, &plla_characteristics); 214 if (IS_ERR(hw)) 215 goto err_free; 216 | 189 if (!sam9x60_pmc) 190 return; 191 192 hw = at91_clk_register_main_rc_osc(regmap, "main_rc_osc", 24000000, 193 50000000); 194 if (IS_ERR(hw)) 195 goto err_free; 196 --- 12 unchanged lines hidden (view full) --- 209 210 sam9x60_pmc->chws[PMC_MAIN] = hw; 211 212 hw = sam9x60_clk_register_pll(regmap, &pmc_pll_lock, "pllack", 213 "mainck", 0, &plla_characteristics); 214 if (IS_ERR(hw)) 215 goto err_free; 216 |
217 sam9x60_pmc->chws[PMC_PLLACK] = hw; 218 |
|
217 hw = sam9x60_clk_register_pll(regmap, &pmc_pll_lock, "upllck", 218 "main_osc", 1, &upll_characteristics); 219 if (IS_ERR(hw)) 220 goto err_free; 221 222 sam9x60_pmc->chws[PMC_UTMI] = hw; 223 224 parent_names[0] = md_slck_name; --- 25 unchanged lines hidden (view full) --- 250 251 snprintf(name, sizeof(name), "prog%d", i); 252 253 hw = at91_clk_register_programmable(regmap, name, 254 parent_names, 6, i, 255 &sam9x60_programmable_layout); 256 if (IS_ERR(hw)) 257 goto err_free; | 219 hw = sam9x60_clk_register_pll(regmap, &pmc_pll_lock, "upllck", 220 "main_osc", 1, &upll_characteristics); 221 if (IS_ERR(hw)) 222 goto err_free; 223 224 sam9x60_pmc->chws[PMC_UTMI] = hw; 225 226 parent_names[0] = md_slck_name; --- 25 unchanged lines hidden (view full) --- 252 253 snprintf(name, sizeof(name), "prog%d", i); 254 255 hw = at91_clk_register_programmable(regmap, name, 256 parent_names, 6, i, 257 &sam9x60_programmable_layout); 258 if (IS_ERR(hw)) 259 goto err_free; |
260 261 sam9x60_pmc->pchws[i] = hw; |
|
258 } 259 260 for (i = 0; i < ARRAY_SIZE(sam9x60_systemck); i++) { 261 hw = at91_clk_register_system(regmap, sam9x60_systemck[i].n, 262 sam9x60_systemck[i].p, 263 sam9x60_systemck[i].id); 264 if (IS_ERR(hw)) 265 goto err_free; --- 28 unchanged lines hidden (view full) --- 294 sam9x60_pmc->ghws[sam9x60_gck[i].id] = hw; 295 } 296 297 of_clk_add_hw_provider(np, of_clk_hw_pmc_get, sam9x60_pmc); 298 299 return; 300 301err_free: | 262 } 263 264 for (i = 0; i < ARRAY_SIZE(sam9x60_systemck); i++) { 265 hw = at91_clk_register_system(regmap, sam9x60_systemck[i].n, 266 sam9x60_systemck[i].p, 267 sam9x60_systemck[i].id); 268 if (IS_ERR(hw)) 269 goto err_free; --- 28 unchanged lines hidden (view full) --- 298 sam9x60_pmc->ghws[sam9x60_gck[i].id] = hw; 299 } 300 301 of_clk_add_hw_provider(np, of_clk_hw_pmc_get, sam9x60_pmc); 302 303 return; 304 305err_free: |
302 pmc_data_free(sam9x60_pmc); | 306 kfree(sam9x60_pmc); |
303} 304/* Some clks are used for a clocksource */ 305CLK_OF_DECLARE(sam9x60_pmc, "microchip,sam9x60-pmc", sam9x60_pmc_setup); | 307} 308/* Some clks are used for a clocksource */ 309CLK_OF_DECLARE(sam9x60_pmc, "microchip,sam9x60-pmc", sam9x60_pmc_setup); |