Lines Matching refs:ss
233 struct sun4i_ss_ctx *ss; in sun4i_ss_probe() local
238 ss = devm_kzalloc(&pdev->dev, sizeof(*ss), GFP_KERNEL); in sun4i_ss_probe()
239 if (!ss) in sun4i_ss_probe()
243 ss->base = devm_ioremap_resource(&pdev->dev, res); in sun4i_ss_probe()
244 if (IS_ERR(ss->base)) { in sun4i_ss_probe()
246 return PTR_ERR(ss->base); in sun4i_ss_probe()
249 ss->ssclk = devm_clk_get(&pdev->dev, "mod"); in sun4i_ss_probe()
250 if (IS_ERR(ss->ssclk)) { in sun4i_ss_probe()
251 err = PTR_ERR(ss->ssclk); in sun4i_ss_probe()
257 ss->busclk = devm_clk_get(&pdev->dev, "ahb"); in sun4i_ss_probe()
258 if (IS_ERR(ss->busclk)) { in sun4i_ss_probe()
259 err = PTR_ERR(ss->busclk); in sun4i_ss_probe()
265 ss->reset = devm_reset_control_get_optional(&pdev->dev, "ahb"); in sun4i_ss_probe()
266 if (IS_ERR(ss->reset)) { in sun4i_ss_probe()
267 if (PTR_ERR(ss->reset) == -EPROBE_DEFER) in sun4i_ss_probe()
268 return PTR_ERR(ss->reset); in sun4i_ss_probe()
270 ss->reset = NULL; in sun4i_ss_probe()
274 err = clk_prepare_enable(ss->busclk); in sun4i_ss_probe()
279 err = clk_prepare_enable(ss->ssclk); in sun4i_ss_probe()
289 err = clk_set_rate(ss->ssclk, cr_mod); in sun4i_ss_probe()
296 if (ss->reset) { in sun4i_ss_probe()
297 err = reset_control_deassert(ss->reset); in sun4i_ss_probe()
309 cr = clk_get_rate(ss->busclk); in sun4i_ss_probe()
317 cr = clk_get_rate(ss->ssclk); in sun4i_ss_probe()
335 writel(SS_ENABLED, ss->base + SS_CTL); in sun4i_ss_probe()
336 v = readl(ss->base + SS_CTL); in sun4i_ss_probe()
340 writel(0, ss->base + SS_CTL); in sun4i_ss_probe()
342 ss->dev = &pdev->dev; in sun4i_ss_probe()
344 spin_lock_init(&ss->slock); in sun4i_ss_probe()
347 ss_algs[i].ss = ss; in sun4i_ss_probe()
352 dev_err(ss->dev, "Fail to register %s\n", in sun4i_ss_probe()
360 dev_err(ss->dev, "Fail to register %s\n", in sun4i_ss_probe()
368 dev_err(ss->dev, "Fail to register %s\n", in sun4i_ss_probe()
374 platform_set_drvdata(pdev, ss); in sun4i_ss_probe()
391 if (ss->reset) in sun4i_ss_probe()
392 reset_control_assert(ss->reset); in sun4i_ss_probe()
394 clk_disable_unprepare(ss->ssclk); in sun4i_ss_probe()
396 clk_disable_unprepare(ss->busclk); in sun4i_ss_probe()
403 struct sun4i_ss_ctx *ss = platform_get_drvdata(pdev); in sun4i_ss_remove() local
419 writel(0, ss->base + SS_CTL); in sun4i_ss_remove()
420 if (ss->reset) in sun4i_ss_remove()
421 reset_control_assert(ss->reset); in sun4i_ss_remove()
422 clk_disable_unprepare(ss->busclk); in sun4i_ss_remove()
423 clk_disable_unprepare(ss->ssclk); in sun4i_ss_remove()