Lines Matching refs:vtg

98 static void vtg_register(struct sti_vtg *vtg)  in vtg_register()  argument
100 list_add_tail(&vtg->link, &vtg_lookup); in vtg_register()
105 struct sti_vtg *vtg; in of_vtg_find() local
107 list_for_each_entry(vtg, &vtg_lookup, link) { in of_vtg_find()
108 if (vtg->np == np) in of_vtg_find()
109 return vtg; in of_vtg_find()
115 static void vtg_reset(struct sti_vtg *vtg) in vtg_reset() argument
118 if (vtg->slave) in vtg_reset()
119 vtg_reset(vtg->slave); in vtg_reset()
121 writel(1, vtg->regs + VTG_DRST_AUTOC); in vtg_reset()
124 static void vtg_set_mode(struct sti_vtg *vtg, in vtg_set_mode() argument
129 if (vtg->slave) in vtg_set_mode()
130 vtg_set_mode(vtg->slave, VTG_TYPE_SLAVE_BY_EXT0, mode); in vtg_set_mode()
132 writel(mode->htotal, vtg->regs + VTG_CLKLN); in vtg_set_mode()
133 writel(mode->vtotal * 2, vtg->regs + VTG_HLFLN); in vtg_set_mode()
137 writel(tmp, vtg->regs + VTG_VID_TFO); in vtg_set_mode()
138 writel(tmp, vtg->regs + VTG_VID_BFO); in vtg_set_mode()
142 writel(tmp, vtg->regs + VTG_VID_TFS); in vtg_set_mode()
143 writel(tmp, vtg->regs + VTG_VID_BFS); in vtg_set_mode()
148 writel(tmp, vtg->regs + VTG_H_HD_1); in vtg_set_mode()
152 writel(tmp, vtg->regs + VTG_TOP_V_VD_1); in vtg_set_mode()
153 writel(tmp, vtg->regs + VTG_BOT_V_VD_1); in vtg_set_mode()
154 writel(0, vtg->regs + VTG_TOP_V_HD_1); in vtg_set_mode()
155 writel(0, vtg->regs + VTG_BOT_V_HD_1); in vtg_set_mode()
159 writel(tmp, vtg->regs + VTG_H_HD_2); in vtg_set_mode()
163 writel(tmp, vtg->regs + VTG_TOP_V_VD_2); in vtg_set_mode()
164 writel(tmp, vtg->regs + VTG_BOT_V_VD_2); in vtg_set_mode()
165 writel(0, vtg->regs + VTG_TOP_V_HD_2); in vtg_set_mode()
166 writel(0, vtg->regs + VTG_BOT_V_HD_2); in vtg_set_mode()
171 writel(tmp, vtg->regs + VTG_H_HD_3); in vtg_set_mode()
175 writel(tmp, vtg->regs + VTG_TOP_V_VD_3); in vtg_set_mode()
176 writel(tmp, vtg->regs + VTG_BOT_V_VD_3); in vtg_set_mode()
180 writel(tmp, vtg->regs + VTG_TOP_V_HD_3); in vtg_set_mode()
181 writel(tmp, vtg->regs + VTG_BOT_V_HD_3); in vtg_set_mode()
185 writel(tmp, vtg->regs + VTG_H_HD_4); in vtg_set_mode()
189 writel(tmp, vtg->regs + VTG_TOP_V_VD_4); in vtg_set_mode()
190 writel(tmp, vtg->regs + VTG_BOT_V_VD_4); in vtg_set_mode()
191 writel(0, vtg->regs + VTG_TOP_V_HD_4); in vtg_set_mode()
192 writel(0, vtg->regs + VTG_BOT_V_HD_4); in vtg_set_mode()
195 writel(type, vtg->regs + VTG_MODE); in vtg_set_mode()
198 static void vtg_enable_irq(struct sti_vtg *vtg) in vtg_enable_irq() argument
201 writel(0xFFFF, vtg->regs + VTG_HOST_ITS_BCLR); in vtg_enable_irq()
202 writel(0xFFFF, vtg->regs + VTG_HOST_ITM_BCLR); in vtg_enable_irq()
203 writel(VTG_IRQ_MASK, vtg->regs + VTG_HOST_ITM_BSET); in vtg_enable_irq()
206 void sti_vtg_set_config(struct sti_vtg *vtg, in sti_vtg_set_config() argument
210 vtg_set_mode(vtg, VTG_TYPE_MASTER, mode); in sti_vtg_set_config()
212 vtg_reset(vtg); in sti_vtg_set_config()
215 if (vtg->slave) in sti_vtg_set_config()
216 vtg_enable_irq(vtg->slave); in sti_vtg_set_config()
218 vtg_enable_irq(vtg); in sti_vtg_set_config()
261 int sti_vtg_register_client(struct sti_vtg *vtg, in sti_vtg_register_client() argument
264 if (vtg->slave) in sti_vtg_register_client()
265 return sti_vtg_register_client(vtg->slave, nb, crtc_id); in sti_vtg_register_client()
267 vtg->crtc_id = crtc_id; in sti_vtg_register_client()
268 return raw_notifier_chain_register(&vtg->notifier_list, nb); in sti_vtg_register_client()
272 int sti_vtg_unregister_client(struct sti_vtg *vtg, struct notifier_block *nb) in sti_vtg_unregister_client() argument
274 if (vtg->slave) in sti_vtg_unregister_client()
275 return sti_vtg_unregister_client(vtg->slave, nb); in sti_vtg_unregister_client()
277 return raw_notifier_chain_unregister(&vtg->notifier_list, nb); in sti_vtg_unregister_client()
283 struct sti_vtg *vtg = arg; in vtg_irq_thread() local
286 event = (vtg->irq_status & VTG_IRQ_TOP) ? in vtg_irq_thread()
289 raw_notifier_call_chain(&vtg->notifier_list, event, &vtg->crtc_id); in vtg_irq_thread()
296 struct sti_vtg *vtg = arg; in vtg_irq() local
298 vtg->irq_status = readl(vtg->regs + VTG_HOST_ITS); in vtg_irq()
300 writel(vtg->irq_status, vtg->regs + VTG_HOST_ITS_BCLR); in vtg_irq()
303 readl(vtg->regs + VTG_HOST_ITS); in vtg_irq()
312 struct sti_vtg *vtg; in vtg_probe() local
317 vtg = devm_kzalloc(dev, sizeof(*vtg), GFP_KERNEL); in vtg_probe()
318 if (!vtg) in vtg_probe()
321 vtg->dev = dev; in vtg_probe()
322 vtg->np = pdev->dev.of_node; in vtg_probe()
330 vtg->regs = devm_ioremap_nocache(dev, res->start, resource_size(res)); in vtg_probe()
334 vtg->slave = of_vtg_find(np); in vtg_probe()
336 if (!vtg->slave) in vtg_probe()
339 vtg->irq = platform_get_irq(pdev, 0); in vtg_probe()
340 if (IS_ERR_VALUE(vtg->irq)) { in vtg_probe()
342 return vtg->irq; in vtg_probe()
346 dev_name(vtg->dev)); in vtg_probe()
348 RAW_INIT_NOTIFIER_HEAD(&vtg->notifier_list); in vtg_probe()
350 ret = devm_request_threaded_irq(dev, vtg->irq, vtg_irq, in vtg_probe()
351 vtg_irq_thread, IRQF_ONESHOT, irq_name, vtg); in vtg_probe()
358 vtg_register(vtg); in vtg_probe()
359 platform_set_drvdata(pdev, vtg); in vtg_probe()
361 DRM_INFO("%s %s\n", __func__, dev_name(vtg->dev)); in vtg_probe()