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);