Lines Matching refs:bc

34 	void (*power_off) (struct imx8mp_blk_ctrl *bc, struct imx8mp_blk_ctrl_domain *domain);
35 void (*power_on) (struct imx8mp_blk_ctrl *bc, struct imx8mp_blk_ctrl_domain *domain);
56 struct imx8mp_blk_ctrl *bc; member
64 void (*power_off) (struct imx8mp_blk_ctrl *bc, struct imx8mp_blk_ctrl_domain *domain);
65 void (*power_on) (struct imx8mp_blk_ctrl *bc, struct imx8mp_blk_ctrl_domain *domain);
76 static void imx8mp_hsio_blk_ctrl_power_on(struct imx8mp_blk_ctrl *bc, in imx8mp_hsio_blk_ctrl_power_on() argument
81 regmap_set_bits(bc->regmap, GPR_REG0, USB_CLOCK_MODULE_EN); in imx8mp_hsio_blk_ctrl_power_on()
84 regmap_set_bits(bc->regmap, GPR_REG0, PCIE_CLOCK_MODULE_EN); in imx8mp_hsio_blk_ctrl_power_on()
87 regmap_set_bits(bc->regmap, GPR_REG0, in imx8mp_hsio_blk_ctrl_power_on()
95 static void imx8mp_hsio_blk_ctrl_power_off(struct imx8mp_blk_ctrl *bc, in imx8mp_hsio_blk_ctrl_power_off() argument
100 regmap_clear_bits(bc->regmap, GPR_REG0, USB_CLOCK_MODULE_EN); in imx8mp_hsio_blk_ctrl_power_off()
103 regmap_clear_bits(bc->regmap, GPR_REG0, PCIE_CLOCK_MODULE_EN); in imx8mp_hsio_blk_ctrl_power_off()
106 regmap_clear_bits(bc->regmap, GPR_REG0, in imx8mp_hsio_blk_ctrl_power_off()
117 struct imx8mp_blk_ctrl *bc = container_of(nb, struct imx8mp_blk_ctrl, in imx8mp_hsio_power_notifier() local
119 struct clk_bulk_data *usb_clk = bc->domains[IMX8MP_HSIOBLK_PD_USB].clks; in imx8mp_hsio_power_notifier()
120 int num_clks = bc->domains[IMX8MP_HSIOBLK_PD_USB].data->num_clks; in imx8mp_hsio_power_notifier()
132 regmap_set_bits(bc->regmap, GPR_REG0, USB_CLOCK_MODULE_EN); in imx8mp_hsio_power_notifier()
136 regmap_clear_bits(bc->regmap, GPR_REG0, USB_CLOCK_MODULE_EN); in imx8mp_hsio_power_notifier()
145 regmap_set_bits(bc->regmap, GPR_REG0, USB_CLOCK_MODULE_EN); in imx8mp_hsio_power_notifier()
205 static void imx8mp_hdmi_blk_ctrl_power_on(struct imx8mp_blk_ctrl *bc, in imx8mp_hdmi_blk_ctrl_power_on() argument
210 regmap_set_bits(bc->regmap, HDMI_RTX_CLK_CTL0, BIT(9)); in imx8mp_hdmi_blk_ctrl_power_on()
211 regmap_set_bits(bc->regmap, HDMI_RTX_RESET_CTL0, BIT(16)); in imx8mp_hdmi_blk_ctrl_power_on()
214 regmap_set_bits(bc->regmap, HDMI_RTX_CLK_CTL0, in imx8mp_hdmi_blk_ctrl_power_on()
217 regmap_set_bits(bc->regmap, HDMI_RTX_CLK_CTL1, BIT(11)); in imx8mp_hdmi_blk_ctrl_power_on()
218 regmap_set_bits(bc->regmap, HDMI_RTX_RESET_CTL0, in imx8mp_hdmi_blk_ctrl_power_on()
222 regmap_set_bits(bc->regmap, HDMI_RTX_CLK_CTL1, BIT(17)); in imx8mp_hdmi_blk_ctrl_power_on()
223 regmap_set_bits(bc->regmap, HDMI_RTX_RESET_CTL0, BIT(18)); in imx8mp_hdmi_blk_ctrl_power_on()
226 regmap_set_bits(bc->regmap, HDMI_RTX_CLK_CTL1, BIT(28)); in imx8mp_hdmi_blk_ctrl_power_on()
227 regmap_set_bits(bc->regmap, HDMI_RTX_RESET_CTL0, BIT(22)); in imx8mp_hdmi_blk_ctrl_power_on()
230 regmap_set_bits(bc->regmap, HDMI_RTX_CLK_CTL1, BIT(27) | BIT(30)); in imx8mp_hdmi_blk_ctrl_power_on()
231 regmap_set_bits(bc->regmap, HDMI_RTX_RESET_CTL0, BIT(20)); in imx8mp_hdmi_blk_ctrl_power_on()
234 regmap_set_bits(bc->regmap, HDMI_RTX_CLK_CTL0, in imx8mp_hdmi_blk_ctrl_power_on()
236 regmap_set_bits(bc->regmap, HDMI_RTX_CLK_CTL1, in imx8mp_hdmi_blk_ctrl_power_on()
239 regmap_set_bits(bc->regmap, HDMI_RTX_RESET_CTL0, in imx8mp_hdmi_blk_ctrl_power_on()
241 regmap_set_bits(bc->regmap, HDMI_TX_CONTROL0, BIT(1)); in imx8mp_hdmi_blk_ctrl_power_on()
244 regmap_set_bits(bc->regmap, HDMI_RTX_CLK_CTL0, BIT(7)); in imx8mp_hdmi_blk_ctrl_power_on()
245 regmap_set_bits(bc->regmap, HDMI_RTX_CLK_CTL1, BIT(22) | BIT(24)); in imx8mp_hdmi_blk_ctrl_power_on()
246 regmap_set_bits(bc->regmap, HDMI_RTX_RESET_CTL0, BIT(12)); in imx8mp_hdmi_blk_ctrl_power_on()
247 regmap_clear_bits(bc->regmap, HDMI_TX_CONTROL0, BIT(3)); in imx8mp_hdmi_blk_ctrl_power_on()
250 regmap_set_bits(bc->regmap, HDMI_RTX_CLK_CTL0, BIT(11)); in imx8mp_hdmi_blk_ctrl_power_on()
253 regmap_set_bits(bc->regmap, HDMI_RTX_CLK_CTL1, BIT(3) | BIT(4) | BIT(5)); in imx8mp_hdmi_blk_ctrl_power_on()
254 regmap_set_bits(bc->regmap, HDMI_RTX_RESET_CTL0, BIT(15)); in imx8mp_hdmi_blk_ctrl_power_on()
261 static void imx8mp_hdmi_blk_ctrl_power_off(struct imx8mp_blk_ctrl *bc, in imx8mp_hdmi_blk_ctrl_power_off() argument
266 regmap_clear_bits(bc->regmap, HDMI_RTX_CLK_CTL0, BIT(9)); in imx8mp_hdmi_blk_ctrl_power_off()
267 regmap_clear_bits(bc->regmap, HDMI_RTX_RESET_CTL0, BIT(16)); in imx8mp_hdmi_blk_ctrl_power_off()
270 regmap_clear_bits(bc->regmap, HDMI_RTX_RESET_CTL0, in imx8mp_hdmi_blk_ctrl_power_off()
272 regmap_clear_bits(bc->regmap, HDMI_RTX_CLK_CTL1, BIT(11)); in imx8mp_hdmi_blk_ctrl_power_off()
273 regmap_clear_bits(bc->regmap, HDMI_RTX_CLK_CTL0, in imx8mp_hdmi_blk_ctrl_power_off()
278 regmap_clear_bits(bc->regmap, HDMI_RTX_RESET_CTL0, BIT(18)); in imx8mp_hdmi_blk_ctrl_power_off()
279 regmap_clear_bits(bc->regmap, HDMI_RTX_CLK_CTL1, BIT(17)); in imx8mp_hdmi_blk_ctrl_power_off()
282 regmap_clear_bits(bc->regmap, HDMI_RTX_RESET_CTL0, BIT(22)); in imx8mp_hdmi_blk_ctrl_power_off()
283 regmap_clear_bits(bc->regmap, HDMI_RTX_CLK_CTL1, BIT(28)); in imx8mp_hdmi_blk_ctrl_power_off()
286 regmap_clear_bits(bc->regmap, HDMI_RTX_RESET_CTL0, BIT(20)); in imx8mp_hdmi_blk_ctrl_power_off()
287 regmap_clear_bits(bc->regmap, HDMI_RTX_CLK_CTL1, BIT(27) | BIT(30)); in imx8mp_hdmi_blk_ctrl_power_off()
290 regmap_clear_bits(bc->regmap, HDMI_TX_CONTROL0, BIT(1)); in imx8mp_hdmi_blk_ctrl_power_off()
291 regmap_clear_bits(bc->regmap, HDMI_RTX_RESET_CTL0, in imx8mp_hdmi_blk_ctrl_power_off()
293 regmap_clear_bits(bc->regmap, HDMI_RTX_CLK_CTL1, in imx8mp_hdmi_blk_ctrl_power_off()
296 regmap_clear_bits(bc->regmap, HDMI_RTX_CLK_CTL0, in imx8mp_hdmi_blk_ctrl_power_off()
300 regmap_set_bits(bc->regmap, HDMI_TX_CONTROL0, BIT(3)); in imx8mp_hdmi_blk_ctrl_power_off()
301 regmap_clear_bits(bc->regmap, HDMI_RTX_RESET_CTL0, BIT(12)); in imx8mp_hdmi_blk_ctrl_power_off()
302 regmap_clear_bits(bc->regmap, HDMI_RTX_CLK_CTL0, BIT(7)); in imx8mp_hdmi_blk_ctrl_power_off()
303 regmap_clear_bits(bc->regmap, HDMI_RTX_CLK_CTL1, BIT(22) | BIT(24)); in imx8mp_hdmi_blk_ctrl_power_off()
306 regmap_clear_bits(bc->regmap, HDMI_RTX_CLK_CTL0, BIT(11)); in imx8mp_hdmi_blk_ctrl_power_off()
309 regmap_clear_bits(bc->regmap, HDMI_RTX_RESET_CTL0, BIT(15)); in imx8mp_hdmi_blk_ctrl_power_off()
310 regmap_clear_bits(bc->regmap, HDMI_RTX_CLK_CTL1, BIT(3) | BIT(4) | BIT(5)); in imx8mp_hdmi_blk_ctrl_power_off()
320 struct imx8mp_blk_ctrl *bc = container_of(nb, struct imx8mp_blk_ctrl, in imx8mp_hdmi_power_notifier() local
332 regmap_write(bc->regmap, HDMI_RTX_RESET_CTL0, 0x0); in imx8mp_hdmi_power_notifier()
333 regmap_write(bc->regmap, HDMI_RTX_CLK_CTL0, 0x0); in imx8mp_hdmi_power_notifier()
334 regmap_write(bc->regmap, HDMI_RTX_CLK_CTL1, 0x0); in imx8mp_hdmi_power_notifier()
335 regmap_set_bits(bc->regmap, HDMI_RTX_CLK_CTL0, in imx8mp_hdmi_power_notifier()
337 regmap_set_bits(bc->regmap, HDMI_RTX_RESET_CTL0, BIT(0)); in imx8mp_hdmi_power_notifier()
425 struct imx8mp_blk_ctrl *bc = domain->bc; in imx8mp_blk_ctrl_power_on() local
429 ret = pm_runtime_resume_and_get(bc->bus_power_dev); in imx8mp_blk_ctrl_power_on()
431 dev_err(bc->dev, "failed to power up bus domain\n"); in imx8mp_blk_ctrl_power_on()
438 dev_err(bc->dev, "failed to enable clocks\n"); in imx8mp_blk_ctrl_power_on()
443 bc->power_on(bc, domain); in imx8mp_blk_ctrl_power_on()
448 dev_err(bc->dev, "failed to power up peripheral domain\n"); in imx8mp_blk_ctrl_power_on()
454 dev_err(bc->dev, "failed to set icc bw\n"); in imx8mp_blk_ctrl_power_on()
463 pm_runtime_put(bc->bus_power_dev); in imx8mp_blk_ctrl_power_on()
472 struct imx8mp_blk_ctrl *bc = domain->bc; in imx8mp_blk_ctrl_power_off() local
477 dev_err(bc->dev, "failed to enable clocks\n"); in imx8mp_blk_ctrl_power_off()
482 bc->power_off(bc, domain); in imx8mp_blk_ctrl_power_off()
490 pm_runtime_put(bc->bus_power_dev); in imx8mp_blk_ctrl_power_off()
501 struct imx8mp_blk_ctrl *bc; in imx8mp_blk_ctrl_probe() local
511 bc = devm_kzalloc(dev, sizeof(*bc), GFP_KERNEL); in imx8mp_blk_ctrl_probe()
512 if (!bc) in imx8mp_blk_ctrl_probe()
515 bc->dev = dev; in imx8mp_blk_ctrl_probe()
525 bc->regmap = devm_regmap_init_mmio(dev, base, &regmap_config); in imx8mp_blk_ctrl_probe()
526 if (IS_ERR(bc->regmap)) in imx8mp_blk_ctrl_probe()
527 return dev_err_probe(dev, PTR_ERR(bc->regmap), in imx8mp_blk_ctrl_probe()
530 bc->domains = devm_kcalloc(dev, num_domains, in imx8mp_blk_ctrl_probe()
533 if (!bc->domains) in imx8mp_blk_ctrl_probe()
536 bc->onecell_data.num_domains = num_domains; in imx8mp_blk_ctrl_probe()
537 bc->onecell_data.domains = in imx8mp_blk_ctrl_probe()
540 if (!bc->onecell_data.domains) in imx8mp_blk_ctrl_probe()
543 bc->bus_power_dev = genpd_dev_pm_attach_by_name(dev, "bus"); in imx8mp_blk_ctrl_probe()
544 if (IS_ERR(bc->bus_power_dev)) in imx8mp_blk_ctrl_probe()
545 return dev_err_probe(dev, PTR_ERR(bc->bus_power_dev), in imx8mp_blk_ctrl_probe()
548 bc->power_off = bc_data->power_off; in imx8mp_blk_ctrl_probe()
549 bc->power_on = bc_data->power_on; in imx8mp_blk_ctrl_probe()
553 struct imx8mp_blk_ctrl_domain *domain = &bc->domains[i]; in imx8mp_blk_ctrl_probe()
599 domain->bc = bc; in imx8mp_blk_ctrl_probe()
622 bc->onecell_data.domains[i] = &domain->genpd; in imx8mp_blk_ctrl_probe()
625 ret = of_genpd_add_provider_onecell(dev->of_node, &bc->onecell_data); in imx8mp_blk_ctrl_probe()
631 bc->power_nb.notifier_call = bc_data->power_notifier_fn; in imx8mp_blk_ctrl_probe()
632 ret = dev_pm_genpd_add_notifier(bc->bus_power_dev, &bc->power_nb); in imx8mp_blk_ctrl_probe()
638 dev_set_drvdata(dev, bc); in imx8mp_blk_ctrl_probe()
646 pm_genpd_remove(&bc->domains[i].genpd); in imx8mp_blk_ctrl_probe()
647 dev_pm_domain_detach(bc->domains[i].power_dev, true); in imx8mp_blk_ctrl_probe()
650 dev_pm_domain_detach(bc->bus_power_dev, true); in imx8mp_blk_ctrl_probe()
657 struct imx8mp_blk_ctrl *bc = dev_get_drvdata(&pdev->dev); in imx8mp_blk_ctrl_remove() local
662 for (i = 0; bc->onecell_data.num_domains; i++) { in imx8mp_blk_ctrl_remove()
663 struct imx8mp_blk_ctrl_domain *domain = &bc->domains[i]; in imx8mp_blk_ctrl_remove()
669 dev_pm_genpd_remove_notifier(bc->bus_power_dev); in imx8mp_blk_ctrl_remove()
671 dev_pm_domain_detach(bc->bus_power_dev, true); in imx8mp_blk_ctrl_remove()
679 struct imx8mp_blk_ctrl *bc = dev_get_drvdata(dev); in imx8mp_blk_ctrl_suspend() local
690 ret = pm_runtime_get_sync(bc->bus_power_dev); in imx8mp_blk_ctrl_suspend()
692 pm_runtime_put_noidle(bc->bus_power_dev); in imx8mp_blk_ctrl_suspend()
696 for (i = 0; i < bc->onecell_data.num_domains; i++) { in imx8mp_blk_ctrl_suspend()
697 struct imx8mp_blk_ctrl_domain *domain = &bc->domains[i]; in imx8mp_blk_ctrl_suspend()
710 pm_runtime_put(bc->domains[i].power_dev); in imx8mp_blk_ctrl_suspend()
712 pm_runtime_put(bc->bus_power_dev); in imx8mp_blk_ctrl_suspend()
719 struct imx8mp_blk_ctrl *bc = dev_get_drvdata(dev); in imx8mp_blk_ctrl_resume() local
722 for (i = 0; i < bc->onecell_data.num_domains; i++) in imx8mp_blk_ctrl_resume()
723 pm_runtime_put(bc->domains[i].power_dev); in imx8mp_blk_ctrl_resume()
725 pm_runtime_put(bc->bus_power_dev); in imx8mp_blk_ctrl_resume()