Lines Matching refs:gth
40 struct gth_device *gth; member
68 static void gth_output_set(struct gth_device *gth, int port, in gth_output_set() argument
75 val = ioread32(gth->base + reg); in gth_output_set()
78 iowrite32(val, gth->base + reg); in gth_output_set()
81 static unsigned int gth_output_get(struct gth_device *gth, int port) in gth_output_get() argument
87 val = ioread32(gth->base + reg); in gth_output_get()
94 static void gth_smcfreq_set(struct gth_device *gth, int port, in gth_smcfreq_set() argument
101 val = ioread32(gth->base + reg); in gth_smcfreq_set()
104 iowrite32(val, gth->base + reg); in gth_smcfreq_set()
107 static unsigned int gth_smcfreq_get(struct gth_device *gth, int port) in gth_smcfreq_get() argument
113 val = ioread32(gth->base + reg); in gth_smcfreq_get()
126 struct gth_device *gth; member
131 gth_master_set(struct gth_device *gth, unsigned int master, int port) in gth_master_set() argument
142 val = ioread32(gth->base + reg); in gth_master_set()
146 iowrite32(val, gth->base + reg); in gth_master_set()
173 struct gth_device *gth = ma->gth; in master_attr_show() local
177 spin_lock(>h->gth_lock); in master_attr_show()
178 port = gth->master[ma->master]; in master_attr_show()
179 spin_unlock(>h->gth_lock); in master_attr_show()
195 struct gth_device *gth = ma->gth; in master_attr_store() local
204 spin_lock(>h->gth_lock); in master_attr_store()
207 old_port = gth->master[ma->master]; in master_attr_store()
209 gth->master[ma->master] = -1; in master_attr_store()
210 clear_bit(ma->master, gth->output[old_port].master); in master_attr_store()
211 if (gth->output[old_port].output->active) in master_attr_store()
212 gth_master_set(gth, ma->master, -1); in master_attr_store()
218 if (!gth->output[port].output) { in master_attr_store()
223 set_bit(ma->master, gth->output[port].master); in master_attr_store()
226 if (gth->output[port].output->active) in master_attr_store()
227 gth_master_set(gth, ma->master, port); in master_attr_store()
230 gth->master[ma->master] = port; in master_attr_store()
233 spin_unlock(>h->gth_lock); in master_attr_store()
240 struct gth_device *gth; member
255 unsigned int (*get)(struct gth_device *gth, int port);
256 void (*set)(struct gth_device *gth, int port,
271 gth_output_parm_set(struct gth_device *gth, int port, unsigned int parm, in gth_output_parm_set() argument
274 unsigned int config = output_parms[parm].get(gth, port); in gth_output_parm_set()
280 output_parms[parm].set(gth, port, config); in gth_output_parm_set()
284 gth_output_parm_get(struct gth_device *gth, int port, unsigned int parm) in gth_output_parm_get() argument
286 unsigned int config = output_parms[parm].get(gth, port); in gth_output_parm_get()
298 static int intel_th_gth_reset(struct gth_device *gth) in intel_th_gth_reset() argument
303 scratchpad = ioread32(gth->base + REG_GTH_SCRPD0); in intel_th_gth_reset()
309 if (gth_output_parm_get(gth, port, TH_OUTPUT_PARM(port)) == in intel_th_gth_reset()
313 gth_output_set(gth, port, 0); in intel_th_gth_reset()
314 gth_smcfreq_set(gth, port, 16); in intel_th_gth_reset()
317 iowrite32(0, gth->base + REG_GTH_DESTOVR); in intel_th_gth_reset()
321 iowrite32(0, gth->base + REG_GTH_SWDEST0 + i * 4); in intel_th_gth_reset()
324 iowrite32(0, gth->base + REG_GTH_SCR); in intel_th_gth_reset()
325 iowrite32(0xfc, gth->base + REG_GTH_SCR2); in intel_th_gth_reset()
340 struct gth_device *gth = oa->gth; in output_attr_show() local
343 spin_lock(>h->gth_lock); in output_attr_show()
345 gth_output_parm_get(gth, oa->port, oa->parm)); in output_attr_show()
346 spin_unlock(>h->gth_lock); in output_attr_show()
357 struct gth_device *gth = oa->gth; in output_attr_store() local
363 spin_lock(>h->gth_lock); in output_attr_store()
364 gth_output_parm_set(gth, oa->port, oa->parm, config); in output_attr_store()
365 spin_unlock(>h->gth_lock); in output_attr_store()
370 static int intel_th_master_attributes(struct gth_device *gth) in intel_th_master_attributes() argument
376 attrs = devm_kcalloc(gth->dev, nattrs, sizeof(void *), GFP_KERNEL); in intel_th_master_attributes()
380 master_attrs = devm_kcalloc(gth->dev, nattrs, in intel_th_master_attributes()
389 name = devm_kasprintf(gth->dev, GFP_KERNEL, "%d%s", i, in intel_th_master_attributes()
402 master_attrs[i].gth = gth; in intel_th_master_attributes()
406 gth->master_group.name = "masters"; in intel_th_master_attributes()
407 gth->master_group.attrs = attrs; in intel_th_master_attributes()
409 return sysfs_create_group(>h->dev->kobj, >h->master_group); in intel_th_master_attributes()
412 static int intel_th_output_attributes(struct gth_device *gth) in intel_th_output_attributes() argument
420 attrs = devm_kcalloc(gth->dev, nattrs, sizeof(void *), GFP_KERNEL); in intel_th_output_attributes()
424 out_attrs = devm_kcalloc(gth->dev, nattrs, in intel_th_output_attributes()
435 name = devm_kasprintf(gth->dev, GFP_KERNEL, "%d_%s", i, in intel_th_output_attributes()
455 out_attrs[idx].gth = gth; in intel_th_output_attributes()
461 gth->output_group.name = "outputs"; in intel_th_output_attributes()
462 gth->output_group.attrs = attrs; in intel_th_output_attributes()
464 return sysfs_create_group(>h->dev->kobj, >h->output_group); in intel_th_output_attributes()
479 struct gth_device *gth = dev_get_drvdata(&thdev->dev); in intel_th_gth_disable() local
484 spin_lock(>h->gth_lock); in intel_th_gth_disable()
487 for_each_set_bit(master, gth->output[output->port].master, in intel_th_gth_disable()
489 gth_master_set(gth, master, -1); in intel_th_gth_disable()
491 spin_unlock(>h->gth_lock); in intel_th_gth_disable()
493 iowrite32(0, gth->base + REG_GTH_SCR); in intel_th_gth_disable()
494 iowrite32(0xfd, gth->base + REG_GTH_SCR2); in intel_th_gth_disable()
499 reg = ioread32(gth->base + REG_GTH_STAT); in intel_th_gth_disable()
504 iowrite32(0xfc, gth->base + REG_GTH_SCR2); in intel_th_gth_disable()
522 struct gth_device *gth = dev_get_drvdata(&thdev->dev); in intel_th_gth_enable() local
526 spin_lock(>h->gth_lock); in intel_th_gth_enable()
527 for_each_set_bit(master, gth->output[output->port].master, in intel_th_gth_enable()
529 gth_master_set(gth, master, output->port); in intel_th_gth_enable()
536 spin_unlock(>h->gth_lock); in intel_th_gth_enable()
538 iowrite32(scr, gth->base + REG_GTH_SCR); in intel_th_gth_enable()
539 iowrite32(0, gth->base + REG_GTH_SCR2); in intel_th_gth_enable()
556 struct gth_device *gth = dev_get_drvdata(&thdev->dev); in intel_th_gth_assign() local
563 if (gth->output[i].port_type != othdev->output.type) in intel_th_gth_assign()
575 spin_lock(>h->gth_lock); in intel_th_gth_assign()
578 gth->output[i].output = &othdev->output; in intel_th_gth_assign()
579 spin_unlock(>h->gth_lock); in intel_th_gth_assign()
592 struct gth_device *gth = dev_get_drvdata(&thdev->dev); in intel_th_gth_unassign() local
595 spin_lock(>h->gth_lock); in intel_th_gth_unassign()
598 gth->output[port].output = NULL; in intel_th_gth_unassign()
599 spin_unlock(>h->gth_lock); in intel_th_gth_unassign()
605 struct gth_device *gth = dev_get_drvdata(&thdev->dev); in intel_th_gth_set_output() local
615 spin_lock(>h->gth_lock); in intel_th_gth_set_output()
616 if (gth->master[master] == -1) { in intel_th_gth_set_output()
617 set_bit(master, gth->output[port].master); in intel_th_gth_set_output()
618 gth->master[master] = port; in intel_th_gth_set_output()
620 spin_unlock(>h->gth_lock); in intel_th_gth_set_output()
628 struct gth_device *gth; in intel_th_gth_probe() local
641 gth = devm_kzalloc(dev, sizeof(*gth), GFP_KERNEL); in intel_th_gth_probe()
642 if (!gth) in intel_th_gth_probe()
645 gth->dev = dev; in intel_th_gth_probe()
646 gth->base = base; in intel_th_gth_probe()
647 spin_lock_init(>h->gth_lock); in intel_th_gth_probe()
649 ret = intel_th_gth_reset(gth); in intel_th_gth_probe()
654 gth->master[i] = -1; in intel_th_gth_probe()
657 gth->output[i].gth = gth; in intel_th_gth_probe()
658 gth->output[i].index = i; in intel_th_gth_probe()
659 gth->output[i].port_type = in intel_th_gth_probe()
660 gth_output_parm_get(gth, i, TH_OUTPUT_PARM(port)); in intel_th_gth_probe()
663 if (intel_th_output_attributes(gth) || in intel_th_gth_probe()
664 intel_th_master_attributes(gth)) { in intel_th_gth_probe()
667 if (gth->output_group.attrs) in intel_th_gth_probe()
668 sysfs_remove_group(>h->dev->kobj, >h->output_group); in intel_th_gth_probe()
672 dev_set_drvdata(dev, gth); in intel_th_gth_probe()
679 struct gth_device *gth = dev_get_drvdata(&thdev->dev); in intel_th_gth_remove() local
681 sysfs_remove_group(>h->dev->kobj, >h->output_group); in intel_th_gth_remove()
682 sysfs_remove_group(>h->dev->kobj, >h->master_group); in intel_th_gth_remove()