Lines Matching refs:sdev
262 struct simpledrm_device *sdev = res; in simpledrm_device_release_clocks() local
265 for (i = 0; i < sdev->clk_count; ++i) { in simpledrm_device_release_clocks()
266 if (sdev->clks[i]) { in simpledrm_device_release_clocks()
267 clk_disable_unprepare(sdev->clks[i]); in simpledrm_device_release_clocks()
268 clk_put(sdev->clks[i]); in simpledrm_device_release_clocks()
273 static int simpledrm_device_init_clocks(struct simpledrm_device *sdev) in simpledrm_device_init_clocks() argument
275 struct drm_device *dev = &sdev->sysfb.dev; in simpledrm_device_init_clocks()
285 sdev->clk_count = of_clk_get_parent_count(of_node); in simpledrm_device_init_clocks()
286 if (!sdev->clk_count) in simpledrm_device_init_clocks()
289 sdev->clks = drmm_kzalloc(dev, sdev->clk_count * sizeof(sdev->clks[0]), in simpledrm_device_init_clocks()
291 if (!sdev->clks) in simpledrm_device_init_clocks()
294 for (i = 0; i < sdev->clk_count; ++i) { in simpledrm_device_init_clocks()
310 sdev->clks[i] = clock; in simpledrm_device_init_clocks()
315 sdev); in simpledrm_device_init_clocks()
320 if (sdev->clks[i]) { in simpledrm_device_init_clocks()
321 clk_disable_unprepare(sdev->clks[i]); in simpledrm_device_init_clocks()
322 clk_put(sdev->clks[i]); in simpledrm_device_init_clocks()
328 static int simpledrm_device_init_clocks(struct simpledrm_device *sdev) in simpledrm_device_init_clocks() argument
360 struct simpledrm_device *sdev = res; in simpledrm_device_release_regulators() local
363 for (i = 0; i < sdev->regulator_count; ++i) { in simpledrm_device_release_regulators()
364 if (sdev->regulators[i]) { in simpledrm_device_release_regulators()
365 regulator_disable(sdev->regulators[i]); in simpledrm_device_release_regulators()
366 regulator_put(sdev->regulators[i]); in simpledrm_device_release_regulators()
371 static int simpledrm_device_init_regulators(struct simpledrm_device *sdev) in simpledrm_device_init_regulators() argument
373 struct drm_device *dev = &sdev->sysfb.dev; in simpledrm_device_init_regulators()
395 sdev->regulators = drmm_kzalloc(dev, in simpledrm_device_init_regulators()
396 count * sizeof(sdev->regulators[0]), in simpledrm_device_init_regulators()
398 if (!sdev->regulators) in simpledrm_device_init_regulators()
429 sdev->regulators[i++] = regulator; in simpledrm_device_init_regulators()
431 sdev->regulator_count = i; in simpledrm_device_init_regulators()
435 sdev); in simpledrm_device_init_regulators()
440 if (sdev->regulators[i]) { in simpledrm_device_init_regulators()
441 regulator_disable(sdev->regulators[i]); in simpledrm_device_init_regulators()
442 regulator_put(sdev->regulators[i]); in simpledrm_device_init_regulators()
448 static int simpledrm_device_init_regulators(struct simpledrm_device *sdev) in simpledrm_device_init_regulators() argument
479 struct simpledrm_device *sdev = res; in simpledrm_device_detach_genpd() local
481 if (sdev->pwr_dom_count <= 1) in simpledrm_device_detach_genpd()
484 for (i = sdev->pwr_dom_count - 1; i >= 0; i--) { in simpledrm_device_detach_genpd()
485 if (sdev->pwr_dom_links[i]) in simpledrm_device_detach_genpd()
486 device_link_del(sdev->pwr_dom_links[i]); in simpledrm_device_detach_genpd()
487 if (!IS_ERR_OR_NULL(sdev->pwr_dom_devs[i])) in simpledrm_device_detach_genpd()
488 dev_pm_domain_detach(sdev->pwr_dom_devs[i], true); in simpledrm_device_detach_genpd()
492 static int simpledrm_device_attach_genpd(struct simpledrm_device *sdev) in simpledrm_device_attach_genpd() argument
494 struct device *dev = sdev->sysfb.dev.dev; in simpledrm_device_attach_genpd()
497 sdev->pwr_dom_count = of_count_phandle_with_args(dev->of_node, "power-domains", in simpledrm_device_attach_genpd()
503 if (sdev->pwr_dom_count <= 1) in simpledrm_device_attach_genpd()
506 sdev->pwr_dom_devs = devm_kcalloc(dev, sdev->pwr_dom_count, in simpledrm_device_attach_genpd()
507 sizeof(*sdev->pwr_dom_devs), in simpledrm_device_attach_genpd()
509 if (!sdev->pwr_dom_devs) in simpledrm_device_attach_genpd()
512 sdev->pwr_dom_links = devm_kcalloc(dev, sdev->pwr_dom_count, in simpledrm_device_attach_genpd()
513 sizeof(*sdev->pwr_dom_links), in simpledrm_device_attach_genpd()
515 if (!sdev->pwr_dom_links) in simpledrm_device_attach_genpd()
518 for (i = 0; i < sdev->pwr_dom_count; i++) { in simpledrm_device_attach_genpd()
519 sdev->pwr_dom_devs[i] = dev_pm_domain_attach_by_id(dev, i); in simpledrm_device_attach_genpd()
520 if (IS_ERR(sdev->pwr_dom_devs[i])) { in simpledrm_device_attach_genpd()
521 int ret = PTR_ERR(sdev->pwr_dom_devs[i]); in simpledrm_device_attach_genpd()
523 simpledrm_device_detach_genpd(sdev); in simpledrm_device_attach_genpd()
526 drm_warn(&sdev->sysfb.dev, in simpledrm_device_attach_genpd()
531 sdev->pwr_dom_links[i] = device_link_add(dev, in simpledrm_device_attach_genpd()
532 sdev->pwr_dom_devs[i], in simpledrm_device_attach_genpd()
536 if (!sdev->pwr_dom_links[i]) in simpledrm_device_attach_genpd()
537 drm_warn(&sdev->sysfb.dev, "failed to link power-domain %d\n", i); in simpledrm_device_attach_genpd()
540 return devm_add_action_or_reset(dev, simpledrm_device_detach_genpd, sdev); in simpledrm_device_attach_genpd()
543 static int simpledrm_device_attach_genpd(struct simpledrm_device *sdev) in simpledrm_device_attach_genpd() argument
601 struct simpledrm_device *sdev; in simpledrm_device_create() local
617 sdev = devm_drm_dev_alloc(&pdev->dev, drv, struct simpledrm_device, sysfb.dev); in simpledrm_device_create()
618 if (IS_ERR(sdev)) in simpledrm_device_create()
619 return ERR_CAST(sdev); in simpledrm_device_create()
620 sysfb = &sdev->sysfb; in simpledrm_device_create()
622 platform_set_drvdata(pdev, sdev); in simpledrm_device_create()
628 ret = simpledrm_device_init_clocks(sdev); in simpledrm_device_create()
631 ret = simpledrm_device_init_regulators(sdev); in simpledrm_device_create()
634 ret = simpledrm_device_attach_genpd(sdev); in simpledrm_device_create()
768 sdev->formats, ARRAY_SIZE(sdev->formats)); in simpledrm_device_create()
770 primary_plane = &sdev->primary_plane; in simpledrm_device_create()
772 sdev->formats, nformats, in simpledrm_device_create()
782 crtc = &sdev->crtc; in simpledrm_device_create()
791 encoder = &sdev->encoder; in simpledrm_device_create()
800 connector = &sdev->connector; in simpledrm_device_create()
816 return sdev; in simpledrm_device_create()
842 struct simpledrm_device *sdev; in simpledrm_probe() local
847 sdev = simpledrm_device_create(&simpledrm_driver, pdev); in simpledrm_probe()
848 if (IS_ERR(sdev)) in simpledrm_probe()
849 return PTR_ERR(sdev); in simpledrm_probe()
850 sysfb = &sdev->sysfb; in simpledrm_probe()
857 drm_client_setup(dev, sdev->sysfb.fb_format); in simpledrm_probe()
864 struct simpledrm_device *sdev = platform_get_drvdata(pdev); in simpledrm_remove() local
865 struct drm_device *dev = &sdev->sysfb.dev; in simpledrm_remove()