Lines Matching full:mtu
29 struct sh_mtu2_device *mtu; member
157 return ioread8(ch->mtu->mapbase + 0x280); in sh_mtu2_read()
173 return iowrite8(value, ch->mtu->mapbase + 0x280); in sh_mtu2_write()
188 raw_spin_lock_irqsave(&ch->mtu->lock, flags); in sh_mtu2_start_stop_ch()
197 raw_spin_unlock_irqrestore(&ch->mtu->lock, flags); in sh_mtu2_start_stop_ch()
206 pm_runtime_get_sync(&ch->mtu->pdev->dev); in sh_mtu2_enable()
207 dev_pm_syscore_device(&ch->mtu->pdev->dev, true); in sh_mtu2_enable()
210 ret = clk_enable(ch->mtu->clk); in sh_mtu2_enable()
212 dev_err(&ch->mtu->pdev->dev, "ch%u: cannot enable clock\n", in sh_mtu2_enable()
220 rate = clk_get_rate(ch->mtu->clk) / 64; in sh_mtu2_enable()
247 clk_disable(ch->mtu->clk); in sh_mtu2_disable()
249 dev_pm_syscore_device(&ch->mtu->pdev->dev, false); in sh_mtu2_disable()
250 pm_runtime_put(&ch->mtu->pdev->dev); in sh_mtu2_disable()
288 dev_info(&ch->mtu->pdev->dev, "ch%u: used for periodic clock events\n", in sh_mtu2_clock_event_set_periodic()
296 pm_genpd_syscore_poweroff(&ced_to_sh_mtu2(ced)->mtu->pdev->dev); in sh_mtu2_clock_event_suspend()
301 pm_genpd_syscore_poweron(&ced_to_sh_mtu2(ced)->mtu->pdev->dev); in sh_mtu2_clock_event_resume()
318 dev_info(&ch->mtu->pdev->dev, "ch%u: used for clock events\n", in sh_mtu2_register_clockevent()
325 ch->mtu->has_clockevent = true; in sh_mtu2_register()
336 struct sh_mtu2_device *mtu) in sh_mtu2_setup_channel() argument
342 ch->mtu = mtu; in sh_mtu2_setup_channel()
345 irq = platform_get_irq_byname(mtu->pdev, name); in sh_mtu2_setup_channel()
353 dev_name(&ch->mtu->pdev->dev), ch); in sh_mtu2_setup_channel()
355 dev_err(&ch->mtu->pdev->dev, "ch%u: failed to request irq %d\n", in sh_mtu2_setup_channel()
360 ch->base = mtu->mapbase + sh_mtu2_channel_offsets[index]; in sh_mtu2_setup_channel()
363 return sh_mtu2_register(ch, dev_name(&mtu->pdev->dev)); in sh_mtu2_setup_channel()
366 static int sh_mtu2_map_memory(struct sh_mtu2_device *mtu) in sh_mtu2_map_memory() argument
370 res = platform_get_resource(mtu->pdev, IORESOURCE_MEM, 0); in sh_mtu2_map_memory()
372 dev_err(&mtu->pdev->dev, "failed to get I/O memory\n"); in sh_mtu2_map_memory()
376 mtu->mapbase = ioremap_nocache(res->start, resource_size(res)); in sh_mtu2_map_memory()
377 if (mtu->mapbase == NULL) in sh_mtu2_map_memory()
383 static int sh_mtu2_setup(struct sh_mtu2_device *mtu, in sh_mtu2_setup() argument
389 mtu->pdev = pdev; in sh_mtu2_setup()
391 raw_spin_lock_init(&mtu->lock); in sh_mtu2_setup()
394 mtu->clk = clk_get(&mtu->pdev->dev, "fck"); in sh_mtu2_setup()
395 if (IS_ERR(mtu->clk)) { in sh_mtu2_setup()
396 dev_err(&mtu->pdev->dev, "cannot get clock\n"); in sh_mtu2_setup()
397 return PTR_ERR(mtu->clk); in sh_mtu2_setup()
400 ret = clk_prepare(mtu->clk); in sh_mtu2_setup()
405 ret = sh_mtu2_map_memory(mtu); in sh_mtu2_setup()
407 dev_err(&mtu->pdev->dev, "failed to remap I/O memory\n"); in sh_mtu2_setup()
416 mtu->num_channels = min_t(unsigned int, ret, in sh_mtu2_setup()
419 mtu->channels = kcalloc(mtu->num_channels, sizeof(*mtu->channels), in sh_mtu2_setup()
421 if (mtu->channels == NULL) { in sh_mtu2_setup()
426 for (i = 0; i < mtu->num_channels; ++i) { in sh_mtu2_setup()
427 ret = sh_mtu2_setup_channel(&mtu->channels[i], i, mtu); in sh_mtu2_setup()
432 platform_set_drvdata(pdev, mtu); in sh_mtu2_setup()
437 kfree(mtu->channels); in sh_mtu2_setup()
438 iounmap(mtu->mapbase); in sh_mtu2_setup()
440 clk_unprepare(mtu->clk); in sh_mtu2_setup()
442 clk_put(mtu->clk); in sh_mtu2_setup()
448 struct sh_mtu2_device *mtu = platform_get_drvdata(pdev); in sh_mtu2_probe() local
456 if (mtu) { in sh_mtu2_probe()
461 mtu = kzalloc(sizeof(*mtu), GFP_KERNEL); in sh_mtu2_probe()
462 if (mtu == NULL) in sh_mtu2_probe()
465 ret = sh_mtu2_setup(mtu, pdev); in sh_mtu2_probe()
467 kfree(mtu); in sh_mtu2_probe()
475 if (mtu->has_clockevent) in sh_mtu2_probe()