Lines Matching refs:ddata
94 void sysc_write(struct sysc *ddata, int offset, u32 value) in sysc_write() argument
96 writel_relaxed(value, ddata->module_va + offset); in sysc_write()
99 static u32 sysc_read(struct sysc *ddata, int offset) in sysc_read() argument
101 if (ddata->cfg.quirks & SYSC_QUIRK_16BIT) { in sysc_read()
104 val = readw_relaxed(ddata->module_va + offset); in sysc_read()
105 val |= (readw_relaxed(ddata->module_va + offset + 4) << 16); in sysc_read()
110 return readl_relaxed(ddata->module_va + offset); in sysc_read()
113 static bool sysc_opt_clks_needed(struct sysc *ddata) in sysc_opt_clks_needed() argument
115 return !!(ddata->cfg.quirks & SYSC_QUIRK_OPT_CLKS_NEEDED); in sysc_opt_clks_needed()
118 static u32 sysc_read_revision(struct sysc *ddata) in sysc_read_revision() argument
120 int offset = ddata->offsets[SYSC_REVISION]; in sysc_read_revision()
125 return sysc_read(ddata, offset); in sysc_read_revision()
128 static int sysc_get_one_clock(struct sysc *ddata, const char *name) in sysc_get_one_clock() argument
139 if (!ddata->clocks[i]) { in sysc_get_one_clock()
147 dev_err(ddata->dev, "clock %s not added\n", name); in sysc_get_one_clock()
151 ddata->clocks[index] = devm_clk_get(ddata->dev, name); in sysc_get_one_clock()
152 if (IS_ERR(ddata->clocks[index])) { in sysc_get_one_clock()
153 if (PTR_ERR(ddata->clocks[index]) == -ENOENT) in sysc_get_one_clock()
156 dev_err(ddata->dev, "clock get error for %s: %li\n", in sysc_get_one_clock()
157 name, PTR_ERR(ddata->clocks[index])); in sysc_get_one_clock()
159 return PTR_ERR(ddata->clocks[index]); in sysc_get_one_clock()
162 error = clk_prepare(ddata->clocks[index]); in sysc_get_one_clock()
164 dev_err(ddata->dev, "clock prepare error for %s: %i\n", in sysc_get_one_clock()
173 static int sysc_get_clocks(struct sysc *ddata) in sysc_get_clocks() argument
175 struct device_node *np = ddata->dev->of_node; in sysc_get_clocks()
180 ddata->clock_roles = devm_kcalloc(ddata->dev, in sysc_get_clocks()
182 sizeof(*ddata->clock_roles), in sysc_get_clocks()
184 if (!ddata->clock_roles) in sysc_get_clocks()
192 ddata->clock_roles[ddata->nr_clocks] = name; in sysc_get_clocks()
193 ddata->nr_clocks++; in sysc_get_clocks()
196 if (ddata->nr_clocks < 1) in sysc_get_clocks()
199 if (ddata->nr_clocks > SYSC_MAX_CLOCKS) { in sysc_get_clocks()
200 dev_err(ddata->dev, "too many clocks for %pOF\n", np); in sysc_get_clocks()
206 dev_err(ddata->dev, "max one fck and ick for %pOF\n", np); in sysc_get_clocks()
211 ddata->clocks = devm_kcalloc(ddata->dev, in sysc_get_clocks()
212 ddata->nr_clocks, sizeof(*ddata->clocks), in sysc_get_clocks()
214 if (!ddata->clocks) in sysc_get_clocks()
217 for (i = 0; i < ddata->nr_clocks; i++) { in sysc_get_clocks()
218 error = sysc_get_one_clock(ddata, ddata->clock_roles[i]); in sysc_get_clocks()
238 static int sysc_init_resets(struct sysc *ddata) in sysc_init_resets() argument
242 ddata->rsts = in sysc_init_resets()
243 devm_reset_control_array_get_optional_exclusive(ddata->dev); in sysc_init_resets()
244 if (IS_ERR(ddata->rsts)) in sysc_init_resets()
245 return PTR_ERR(ddata->rsts); in sysc_init_resets()
247 if (ddata->cfg.quirks & SYSC_QUIRK_NO_RESET_ON_INIT) in sysc_init_resets()
250 error = reset_control_assert(ddata->rsts); in sysc_init_resets()
255 error = reset_control_deassert(ddata->rsts); in sysc_init_resets()
271 static int sysc_parse_and_check_child_range(struct sysc *ddata) in sysc_parse_and_check_child_range() argument
273 struct device_node *np = ddata->dev->of_node; in sysc_parse_and_check_child_range()
280 dev_err(ddata->dev, "missing ranges for %pOF\n", np); in sysc_parse_and_check_child_range()
288 dev_err(ddata->dev, "incomplete ranges for %pOF\n", np); in sysc_parse_and_check_child_range()
302 dev_err(ddata->dev, "invalid ranges for %pOF\n", np); in sysc_parse_and_check_child_range()
308 ddata->module_pa = of_translate_address(np, ranges++); in sysc_parse_and_check_child_range()
309 ddata->module_size = be32_to_cpup(ranges); in sysc_parse_and_check_child_range()
316 static void sysc_init_stdout_path(struct sysc *ddata) in sysc_init_stdout_path() argument
347 static void sysc_check_quirk_stdout(struct sysc *ddata, in sysc_check_quirk_stdout() argument
350 sysc_init_stdout_path(ddata); in sysc_check_quirk_stdout()
354 ddata->cfg.quirks |= SYSC_QUIRK_NO_IDLE_ON_INIT | in sysc_check_quirk_stdout()
367 static int sysc_check_one_child(struct sysc *ddata, in sysc_check_one_child() argument
374 dev_warn(ddata->dev, "really a child ti,hwmods property?"); in sysc_check_one_child()
376 sysc_check_quirk_stdout(ddata, np); in sysc_check_one_child()
381 static int sysc_check_children(struct sysc *ddata) in sysc_check_children() argument
386 for_each_child_of_node(ddata->dev->of_node, child) { in sysc_check_children()
387 error = sysc_check_one_child(ddata, child); in sysc_check_children()
401 static void sysc_check_quirk_16bit(struct sysc *ddata, struct resource *res) in sysc_check_quirk_16bit() argument
404 ddata->cfg.quirks |= SYSC_QUIRK_16BIT | SYSC_QUIRK_USE_CLOCKACT; in sysc_check_quirk_16bit()
412 static int sysc_parse_one(struct sysc *ddata, enum sysc_registers reg) in sysc_parse_one() argument
427 res = platform_get_resource_byname(to_platform_device(ddata->dev), in sysc_parse_one()
430 ddata->offsets[reg] = -ENODEV; in sysc_parse_one()
435 ddata->offsets[reg] = res->start - ddata->module_pa; in sysc_parse_one()
437 sysc_check_quirk_16bit(ddata, res); in sysc_parse_one()
442 static int sysc_parse_registers(struct sysc *ddata) in sysc_parse_registers() argument
447 error = sysc_parse_one(ddata, i); in sysc_parse_registers()
459 static int sysc_check_registers(struct sysc *ddata) in sysc_check_registers() argument
464 if (ddata->offsets[i] < 0) in sysc_check_registers()
467 if (ddata->offsets[i] > (ddata->module_size - 4)) { in sysc_check_registers()
468 dev_err(ddata->dev, "register outside module range"); in sysc_check_registers()
474 if (ddata->offsets[j] < 0) in sysc_check_registers()
477 if (ddata->offsets[i] == ddata->offsets[j]) in sysc_check_registers()
484 dev_err(ddata->dev, "missing registers\n"); in sysc_check_registers()
490 dev_err(ddata->dev, "overlapping registers: (%i/%i)", in sysc_check_registers()
510 static int sysc_ioremap(struct sysc *ddata) in sysc_ioremap() argument
514 size = max3(ddata->offsets[SYSC_REVISION], in sysc_ioremap()
515 ddata->offsets[SYSC_SYSCONFIG], in sysc_ioremap()
516 ddata->offsets[SYSC_SYSSTATUS]); in sysc_ioremap()
518 if (size < 0 || (size + sizeof(u32)) > ddata->module_size) in sysc_ioremap()
521 ddata->module_va = devm_ioremap(ddata->dev, in sysc_ioremap()
522 ddata->module_pa, in sysc_ioremap()
524 if (!ddata->module_va) in sysc_ioremap()
534 static int sysc_map_and_check_registers(struct sysc *ddata) in sysc_map_and_check_registers() argument
538 error = sysc_parse_and_check_child_range(ddata); in sysc_map_and_check_registers()
542 error = sysc_check_children(ddata); in sysc_map_and_check_registers()
546 error = sysc_parse_registers(ddata); in sysc_map_and_check_registers()
550 error = sysc_ioremap(ddata); in sysc_map_and_check_registers()
554 error = sysc_check_registers(ddata); in sysc_map_and_check_registers()
566 static int sysc_show_rev(char *bufp, struct sysc *ddata) in sysc_show_rev() argument
570 if (ddata->offsets[SYSC_REVISION] < 0) in sysc_show_rev()
573 len = sprintf(bufp, ":%08x", ddata->revision); in sysc_show_rev()
578 static int sysc_show_reg(struct sysc *ddata, in sysc_show_reg() argument
581 if (ddata->offsets[reg] < 0) in sysc_show_reg()
584 return sprintf(bufp, ":%x", ddata->offsets[reg]); in sysc_show_reg()
587 static int sysc_show_name(char *bufp, struct sysc *ddata) in sysc_show_name() argument
589 if (!ddata->name) in sysc_show_name()
592 return sprintf(bufp, ":%s", ddata->name); in sysc_show_name()
599 static void sysc_show_registers(struct sysc *ddata) in sysc_show_registers() argument
606 bufp += sysc_show_reg(ddata, bufp, i); in sysc_show_registers()
608 bufp += sysc_show_rev(bufp, ddata); in sysc_show_registers()
609 bufp += sysc_show_name(bufp, ddata); in sysc_show_registers()
611 dev_dbg(ddata->dev, "%llx:%x%s\n", in sysc_show_registers()
612 ddata->module_pa, ddata->module_size, in sysc_show_registers()
619 struct sysc *ddata; in sysc_runtime_suspend() local
622 ddata = dev_get_drvdata(dev); in sysc_runtime_suspend()
624 if (!ddata->enabled) in sysc_runtime_suspend()
627 if (ddata->legacy_mode) { in sysc_runtime_suspend()
628 pdata = dev_get_platdata(ddata->dev); in sysc_runtime_suspend()
635 error = pdata->idle_module(dev, &ddata->cookie); in sysc_runtime_suspend()
643 for (i = 0; i < ddata->nr_clocks; i++) { in sysc_runtime_suspend()
644 if (IS_ERR_OR_NULL(ddata->clocks[i])) in sysc_runtime_suspend()
647 if (i >= SYSC_OPTFCK0 && !sysc_opt_clks_needed(ddata)) in sysc_runtime_suspend()
650 clk_disable(ddata->clocks[i]); in sysc_runtime_suspend()
654 ddata->enabled = false; in sysc_runtime_suspend()
662 struct sysc *ddata; in sysc_runtime_resume() local
665 ddata = dev_get_drvdata(dev); in sysc_runtime_resume()
667 if (ddata->enabled) in sysc_runtime_resume()
670 if (ddata->legacy_mode) { in sysc_runtime_resume()
671 pdata = dev_get_platdata(ddata->dev); in sysc_runtime_resume()
678 error = pdata->enable_module(dev, &ddata->cookie); in sysc_runtime_resume()
686 for (i = 0; i < ddata->nr_clocks; i++) { in sysc_runtime_resume()
687 if (IS_ERR_OR_NULL(ddata->clocks[i])) in sysc_runtime_resume()
690 if (i >= SYSC_OPTFCK0 && !sysc_opt_clks_needed(ddata)) in sysc_runtime_resume()
693 error = clk_enable(ddata->clocks[i]); in sysc_runtime_resume()
699 ddata->enabled = true; in sysc_runtime_resume()
707 struct sysc *ddata; in sysc_suspend() local
710 ddata = dev_get_drvdata(dev); in sysc_suspend()
712 if (ddata->cfg.quirks & (SYSC_QUIRK_RESOURCE_PROVIDER | in sysc_suspend()
716 if (!ddata->enabled) in sysc_suspend()
719 dev_dbg(ddata->dev, "%s %s\n", __func__, in sysc_suspend()
720 ddata->name ? ddata->name : ""); in sysc_suspend()
724 dev_warn(ddata->dev, "%s not idle %i %s\n", in sysc_suspend()
726 ddata->name ? ddata->name : ""); in sysc_suspend()
731 ddata->needs_resume = true; in sysc_suspend()
738 struct sysc *ddata; in sysc_resume() local
741 ddata = dev_get_drvdata(dev); in sysc_resume()
743 if (ddata->cfg.quirks & (SYSC_QUIRK_RESOURCE_PROVIDER | in sysc_resume()
747 if (ddata->needs_resume) { in sysc_resume()
748 dev_dbg(ddata->dev, "%s %s\n", __func__, in sysc_resume()
749 ddata->name ? ddata->name : ""); in sysc_resume()
753 dev_err(ddata->dev, "%s error %i %s\n", in sysc_resume()
755 ddata->name ? ddata->name : ""); in sysc_resume()
760 ddata->needs_resume = false; in sysc_resume()
768 struct sysc *ddata; in sysc_noirq_suspend() local
770 ddata = dev_get_drvdata(dev); in sysc_noirq_suspend()
772 if (ddata->cfg.quirks & SYSC_QUIRK_LEGACY_IDLE) in sysc_noirq_suspend()
775 if (!(ddata->cfg.quirks & SYSC_QUIRK_RESOURCE_PROVIDER)) in sysc_noirq_suspend()
778 if (!ddata->enabled) in sysc_noirq_suspend()
781 dev_dbg(ddata->dev, "%s %s\n", __func__, in sysc_noirq_suspend()
782 ddata->name ? ddata->name : ""); in sysc_noirq_suspend()
784 ddata->needs_resume = true; in sysc_noirq_suspend()
791 struct sysc *ddata; in sysc_noirq_resume() local
793 ddata = dev_get_drvdata(dev); in sysc_noirq_resume()
795 if (ddata->cfg.quirks & SYSC_QUIRK_LEGACY_IDLE) in sysc_noirq_resume()
798 if (!(ddata->cfg.quirks & SYSC_QUIRK_RESOURCE_PROVIDER)) in sysc_noirq_resume()
801 if (ddata->needs_resume) { in sysc_noirq_resume()
802 dev_dbg(ddata->dev, "%s %s\n", __func__, in sysc_noirq_resume()
803 ddata->name ? ddata->name : ""); in sysc_noirq_resume()
805 ddata->needs_resume = false; in sysc_noirq_resume()
919 static void sysc_init_revision_quirks(struct sysc *ddata) in sysc_init_revision_quirks() argument
927 if (q->base && q->base != ddata->module_pa) in sysc_init_revision_quirks()
931 q->rev_offset != ddata->offsets[SYSC_REVISION]) in sysc_init_revision_quirks()
935 q->sysc_offset != ddata->offsets[SYSC_SYSCONFIG]) in sysc_init_revision_quirks()
939 q->syss_offset != ddata->offsets[SYSC_SYSSTATUS]) in sysc_init_revision_quirks()
942 if (q->revision == ddata->revision || in sysc_init_revision_quirks()
944 (ddata->revision & q->revision_mask)) { in sysc_init_revision_quirks()
945 ddata->name = q->name; in sysc_init_revision_quirks()
946 ddata->cfg.quirks |= q->quirks; in sysc_init_revision_quirks()
951 static int sysc_reset(struct sysc *ddata) in sysc_reset() argument
953 int offset = ddata->offsets[SYSC_SYSCONFIG]; in sysc_reset()
956 if (ddata->legacy_mode || offset < 0 || in sysc_reset()
957 ddata->cfg.quirks & SYSC_QUIRK_NO_RESET_ON_INIT) in sysc_reset()
964 if (!ddata->cfg.syss_mask) { in sysc_reset()
965 dev_err(ddata->dev, "No ti,syss-mask. Reset failed\n"); in sysc_reset()
969 val = sysc_read(ddata, offset); in sysc_reset()
970 val |= (0x1 << ddata->cap->regbits->srst_shift); in sysc_reset()
971 sysc_write(ddata, offset, val); in sysc_reset()
974 offset = ddata->offsets[SYSC_SYSSTATUS]; in sysc_reset()
976 return readl_poll_timeout(ddata->module_va + offset, val, in sysc_reset()
977 (val & ddata->cfg.syss_mask) == 0x0, in sysc_reset()
982 static int sysc_init_module(struct sysc *ddata) in sysc_init_module() argument
986 if (ddata->cfg.quirks & SYSC_QUIRK_NO_IDLE_ON_INIT) { in sysc_init_module()
987 ddata->revision = sysc_read_revision(ddata); in sysc_init_module()
991 error = pm_runtime_get_sync(ddata->dev); in sysc_init_module()
993 pm_runtime_put_noidle(ddata->dev); in sysc_init_module()
998 error = sysc_reset(ddata); in sysc_init_module()
1000 dev_err(ddata->dev, "Reset failed with %d\n", error); in sysc_init_module()
1001 pm_runtime_put_sync(ddata->dev); in sysc_init_module()
1006 ddata->revision = sysc_read_revision(ddata); in sysc_init_module()
1007 pm_runtime_put_sync(ddata->dev); in sysc_init_module()
1010 sysc_init_revision_quirks(ddata); in sysc_init_module()
1015 static int sysc_init_sysc_mask(struct sysc *ddata) in sysc_init_sysc_mask() argument
1017 struct device_node *np = ddata->dev->of_node; in sysc_init_sysc_mask()
1026 ddata->cfg.sysc_val = val & ddata->cap->sysc_mask; in sysc_init_sysc_mask()
1028 ddata->cfg.sysc_val = ddata->cap->sysc_mask; in sysc_init_sysc_mask()
1033 static int sysc_init_idlemode(struct sysc *ddata, u8 *idlemodes, in sysc_init_idlemode() argument
1036 struct device_node *np = ddata->dev->of_node; in sysc_init_idlemode()
1043 dev_err(ddata->dev, "invalid idlemode: %i\n", val); in sysc_init_idlemode()
1052 static int sysc_init_idlemodes(struct sysc *ddata) in sysc_init_idlemodes() argument
1056 error = sysc_init_idlemode(ddata, &ddata->cfg.midlemodes, in sysc_init_idlemodes()
1061 error = sysc_init_idlemode(ddata, &ddata->cfg.sidlemodes, in sysc_init_idlemodes()
1076 static int sysc_init_syss_mask(struct sysc *ddata) in sysc_init_syss_mask() argument
1078 struct device_node *np = ddata->dev->of_node; in sysc_init_syss_mask()
1084 if ((ddata->cap->type == TI_SYSC_OMAP4 || in sysc_init_syss_mask()
1085 ddata->cap->type == TI_SYSC_OMAP4_TIMER) && in sysc_init_syss_mask()
1086 (ddata->cfg.sysc_val & SYSC_OMAP4_SOFTRESET)) in sysc_init_syss_mask()
1087 ddata->cfg.quirks |= SYSC_QUIRK_RESET_STATUS; in sysc_init_syss_mask()
1092 if (!(val & 1) && (ddata->cfg.sysc_val & SYSC_OMAP4_SOFTRESET)) in sysc_init_syss_mask()
1093 ddata->cfg.quirks |= SYSC_QUIRK_RESET_STATUS; in sysc_init_syss_mask()
1095 ddata->cfg.syss_mask = val; in sysc_init_syss_mask()
1104 static int sysc_child_add_named_clock(struct sysc *ddata, in sysc_child_add_named_clock() argument
1122 clk = clk_get(ddata->dev, name); in sysc_child_add_named_clock()
1135 static int sysc_child_add_clocks(struct sysc *ddata, in sysc_child_add_clocks() argument
1140 for (i = 0; i < ddata->nr_clocks; i++) { in sysc_child_add_clocks()
1141 error = sysc_child_add_named_clock(ddata, in sysc_child_add_clocks()
1143 ddata->clock_roles[i]); in sysc_child_add_clocks()
1145 dev_err(ddata->dev, "could not add child clock %s: %i\n", in sysc_child_add_clocks()
1146 ddata->clock_roles[i], error); in sysc_child_add_clocks()
1170 struct sysc *ddata; in sysc_child_runtime_suspend() local
1173 ddata = sysc_child_to_parent(dev); in sysc_child_runtime_suspend()
1179 if (!ddata->enabled) in sysc_child_runtime_suspend()
1182 return sysc_runtime_suspend(ddata->dev); in sysc_child_runtime_suspend()
1187 struct sysc *ddata; in sysc_child_runtime_resume() local
1190 ddata = sysc_child_to_parent(dev); in sysc_child_runtime_resume()
1192 if (!ddata->enabled) { in sysc_child_runtime_resume()
1193 error = sysc_runtime_resume(ddata->dev); in sysc_child_runtime_resume()
1195 dev_err(ddata->dev, in sysc_child_runtime_resume()
1205 struct sysc *ddata; in sysc_child_suspend_noirq() local
1208 ddata = sysc_child_to_parent(dev); in sysc_child_suspend_noirq()
1210 dev_dbg(ddata->dev, "%s %s\n", __func__, in sysc_child_suspend_noirq()
1211 ddata->name ? ddata->name : ""); in sysc_child_suspend_noirq()
1230 error = sysc_runtime_suspend(ddata->dev); in sysc_child_suspend_noirq()
1238 ddata->child_needs_resume = true; in sysc_child_suspend_noirq()
1246 struct sysc *ddata; in sysc_child_resume_noirq() local
1249 ddata = sysc_child_to_parent(dev); in sysc_child_resume_noirq()
1251 dev_dbg(ddata->dev, "%s %s\n", __func__, in sysc_child_resume_noirq()
1252 ddata->name ? ddata->name : ""); in sysc_child_resume_noirq()
1254 if (ddata->child_needs_resume) { in sysc_child_resume_noirq()
1255 ddata->child_needs_resume = false; in sysc_child_resume_noirq()
1257 error = sysc_runtime_resume(ddata->dev); in sysc_child_resume_noirq()
1259 dev_err(ddata->dev, in sysc_child_resume_noirq()
1265 dev_err(ddata->dev, in sysc_child_resume_noirq()
1298 static void sysc_legacy_idle_quirk(struct sysc *ddata, struct device *child) in sysc_legacy_idle_quirk() argument
1300 if (!ddata->legacy_mode) in sysc_legacy_idle_quirk()
1303 if (ddata->cfg.quirks & SYSC_QUIRK_LEGACY_IDLE) in sysc_legacy_idle_quirk()
1311 struct sysc *ddata; in sysc_notifier_call() local
1314 ddata = sysc_child_to_parent(dev); in sysc_notifier_call()
1315 if (!ddata) in sysc_notifier_call()
1320 error = sysc_child_add_clocks(ddata, dev); in sysc_notifier_call()
1323 sysc_legacy_idle_quirk(ddata, dev); in sysc_notifier_call()
1349 static int sysc_init_dts_quirks(struct sysc *ddata) in sysc_init_dts_quirks() argument
1351 struct device_node *np = ddata->dev->of_node; in sysc_init_dts_quirks()
1356 ddata->legacy_mode = of_get_property(np, "ti,hwmods", NULL); in sysc_init_dts_quirks()
1363 ddata->cfg.quirks |= sysc_dts_quirks[i].mask; in sysc_init_dts_quirks()
1369 dev_warn(ddata->dev, "bad ti,sysc-delay-us: %i\n", in sysc_init_dts_quirks()
1373 ddata->cfg.srst_udelay = (u8)val; in sysc_init_dts_quirks()
1379 static void sysc_unprepare(struct sysc *ddata) in sysc_unprepare() argument
1384 if (!IS_ERR_OR_NULL(ddata->clocks[i])) in sysc_unprepare()
1385 clk_unprepare(ddata->clocks[i]); in sysc_unprepare()
1615 static int sysc_init_pdata(struct sysc *ddata) in sysc_init_pdata() argument
1617 struct ti_sysc_platform_data *pdata = dev_get_platdata(ddata->dev); in sysc_init_pdata()
1621 if (!pdata || !ddata->legacy_mode) in sysc_init_pdata()
1624 mdata.name = ddata->legacy_mode; in sysc_init_pdata()
1625 mdata.module_pa = ddata->module_pa; in sysc_init_pdata()
1626 mdata.module_size = ddata->module_size; in sysc_init_pdata()
1627 mdata.offsets = ddata->offsets; in sysc_init_pdata()
1629 mdata.cap = ddata->cap; in sysc_init_pdata()
1630 mdata.cfg = &ddata->cfg; in sysc_init_pdata()
1635 error = pdata->init_module(ddata->dev, &mdata, &ddata->cookie); in sysc_init_pdata()
1642 static int sysc_init_match(struct sysc *ddata) in sysc_init_match() argument
1646 cap = of_device_get_match_data(ddata->dev); in sysc_init_match()
1650 ddata->cap = cap; in sysc_init_match()
1651 if (ddata->cap) in sysc_init_match()
1652 ddata->cfg.quirks |= ddata->cap->mod_quirks; in sysc_init_match()
1659 struct sysc *ddata; in ti_sysc_idle() local
1661 ddata = container_of(work, struct sysc, idle_work.work); in ti_sysc_idle()
1663 if (pm_runtime_active(ddata->dev)) in ti_sysc_idle()
1664 pm_runtime_put_sync(ddata->dev); in ti_sysc_idle()
1675 struct sysc *ddata; in sysc_probe() local
1678 ddata = devm_kzalloc(&pdev->dev, sizeof(*ddata), GFP_KERNEL); in sysc_probe()
1679 if (!ddata) in sysc_probe()
1682 ddata->dev = &pdev->dev; in sysc_probe()
1683 platform_set_drvdata(pdev, ddata); in sysc_probe()
1685 error = sysc_init_match(ddata); in sysc_probe()
1689 error = sysc_init_dts_quirks(ddata); in sysc_probe()
1693 error = sysc_get_clocks(ddata); in sysc_probe()
1697 error = sysc_map_and_check_registers(ddata); in sysc_probe()
1701 error = sysc_init_sysc_mask(ddata); in sysc_probe()
1705 error = sysc_init_idlemodes(ddata); in sysc_probe()
1709 error = sysc_init_syss_mask(ddata); in sysc_probe()
1713 error = sysc_init_pdata(ddata); in sysc_probe()
1717 error = sysc_init_resets(ddata); in sysc_probe()
1721 pm_runtime_enable(ddata->dev); in sysc_probe()
1722 error = sysc_init_module(ddata); in sysc_probe()
1726 error = pm_runtime_get_sync(ddata->dev); in sysc_probe()
1728 pm_runtime_put_noidle(ddata->dev); in sysc_probe()
1729 pm_runtime_disable(ddata->dev); in sysc_probe()
1733 sysc_show_registers(ddata); in sysc_probe()
1735 ddata->dev->type = &sysc_device_type; in sysc_probe()
1736 error = of_platform_populate(ddata->dev->of_node, sysc_match_table, in sysc_probe()
1738 ddata->dev); in sysc_probe()
1742 INIT_DELAYED_WORK(&ddata->idle_work, ti_sysc_idle); in sysc_probe()
1745 if (ddata->cfg.quirks & (SYSC_QUIRK_NO_IDLE_ON_INIT | in sysc_probe()
1747 schedule_delayed_work(&ddata->idle_work, 3000); in sysc_probe()
1752 if (!of_get_available_child_count(ddata->dev->of_node)) in sysc_probe()
1753 reset_control_assert(ddata->rsts); in sysc_probe()
1761 sysc_unprepare(ddata); in sysc_probe()
1768 struct sysc *ddata = platform_get_drvdata(pdev); in sysc_remove() local
1771 cancel_delayed_work_sync(&ddata->idle_work); in sysc_remove()
1773 error = pm_runtime_get_sync(ddata->dev); in sysc_remove()
1775 pm_runtime_put_noidle(ddata->dev); in sysc_remove()
1776 pm_runtime_disable(ddata->dev); in sysc_remove()
1784 reset_control_assert(ddata->rsts); in sysc_remove()
1787 sysc_unprepare(ddata); in sysc_remove()