Lines Matching refs:mtu
37 struct sh_mtu2_device *mtu; member
165 return ioread8(ch->mtu->mapbase + 0x280); in sh_mtu2_read()
181 return iowrite8(value, ch->mtu->mapbase + 0x280); in sh_mtu2_write()
196 raw_spin_lock_irqsave(&ch->mtu->lock, flags); in sh_mtu2_start_stop_ch()
205 raw_spin_unlock_irqrestore(&ch->mtu->lock, flags); in sh_mtu2_start_stop_ch()
214 pm_runtime_get_sync(&ch->mtu->pdev->dev); in sh_mtu2_enable()
215 dev_pm_syscore_device(&ch->mtu->pdev->dev, true); in sh_mtu2_enable()
218 ret = clk_enable(ch->mtu->clk); in sh_mtu2_enable()
220 dev_err(&ch->mtu->pdev->dev, "ch%u: cannot enable clock\n", in sh_mtu2_enable()
228 rate = clk_get_rate(ch->mtu->clk) / 64; in sh_mtu2_enable()
255 clk_disable(ch->mtu->clk); in sh_mtu2_disable()
257 dev_pm_syscore_device(&ch->mtu->pdev->dev, false); in sh_mtu2_disable()
258 pm_runtime_put(&ch->mtu->pdev->dev); in sh_mtu2_disable()
296 dev_info(&ch->mtu->pdev->dev, "ch%u: used for periodic clock events\n", in sh_mtu2_clock_event_set_periodic()
304 pm_genpd_syscore_poweroff(&ced_to_sh_mtu2(ced)->mtu->pdev->dev); in sh_mtu2_clock_event_suspend()
309 pm_genpd_syscore_poweron(&ced_to_sh_mtu2(ced)->mtu->pdev->dev); in sh_mtu2_clock_event_resume()
326 dev_info(&ch->mtu->pdev->dev, "ch%u: used for clock events\n", in sh_mtu2_register_clockevent()
333 ch->mtu->has_clockevent = true; in sh_mtu2_register()
340 struct sh_mtu2_device *mtu) in sh_mtu2_setup_channel() argument
349 ch->mtu = mtu; in sh_mtu2_setup_channel()
352 irq = platform_get_irq_byname(mtu->pdev, name); in sh_mtu2_setup_channel()
360 dev_name(&ch->mtu->pdev->dev), ch); in sh_mtu2_setup_channel()
362 dev_err(&ch->mtu->pdev->dev, "ch%u: failed to request irq %d\n", in sh_mtu2_setup_channel()
367 ch->base = mtu->mapbase + channel_offsets[index]; in sh_mtu2_setup_channel()
370 return sh_mtu2_register(ch, dev_name(&mtu->pdev->dev)); in sh_mtu2_setup_channel()
373 static int sh_mtu2_map_memory(struct sh_mtu2_device *mtu) in sh_mtu2_map_memory() argument
377 res = platform_get_resource(mtu->pdev, IORESOURCE_MEM, 0); in sh_mtu2_map_memory()
379 dev_err(&mtu->pdev->dev, "failed to get I/O memory\n"); in sh_mtu2_map_memory()
383 mtu->mapbase = ioremap_nocache(res->start, resource_size(res)); in sh_mtu2_map_memory()
384 if (mtu->mapbase == NULL) in sh_mtu2_map_memory()
390 static int sh_mtu2_setup(struct sh_mtu2_device *mtu, in sh_mtu2_setup() argument
396 mtu->pdev = pdev; in sh_mtu2_setup()
398 raw_spin_lock_init(&mtu->lock); in sh_mtu2_setup()
401 mtu->clk = clk_get(&mtu->pdev->dev, "fck"); in sh_mtu2_setup()
402 if (IS_ERR(mtu->clk)) { in sh_mtu2_setup()
403 dev_err(&mtu->pdev->dev, "cannot get clock\n"); in sh_mtu2_setup()
404 return PTR_ERR(mtu->clk); in sh_mtu2_setup()
407 ret = clk_prepare(mtu->clk); in sh_mtu2_setup()
412 ret = sh_mtu2_map_memory(mtu); in sh_mtu2_setup()
414 dev_err(&mtu->pdev->dev, "failed to remap I/O memory\n"); in sh_mtu2_setup()
419 mtu->num_channels = 3; in sh_mtu2_setup()
421 mtu->channels = kzalloc(sizeof(*mtu->channels) * mtu->num_channels, in sh_mtu2_setup()
423 if (mtu->channels == NULL) { in sh_mtu2_setup()
428 for (i = 0; i < mtu->num_channels; ++i) { in sh_mtu2_setup()
429 ret = sh_mtu2_setup_channel(&mtu->channels[i], i, mtu); in sh_mtu2_setup()
434 platform_set_drvdata(pdev, mtu); in sh_mtu2_setup()
439 kfree(mtu->channels); in sh_mtu2_setup()
440 iounmap(mtu->mapbase); in sh_mtu2_setup()
442 clk_unprepare(mtu->clk); in sh_mtu2_setup()
444 clk_put(mtu->clk); in sh_mtu2_setup()
450 struct sh_mtu2_device *mtu = platform_get_drvdata(pdev); in sh_mtu2_probe() local
458 if (mtu) { in sh_mtu2_probe()
463 mtu = kzalloc(sizeof(*mtu), GFP_KERNEL); in sh_mtu2_probe()
464 if (mtu == NULL) in sh_mtu2_probe()
467 ret = sh_mtu2_setup(mtu, pdev); in sh_mtu2_probe()
469 kfree(mtu); in sh_mtu2_probe()
477 if (mtu->has_clockevent) in sh_mtu2_probe()