Hi, On Thu, Jun 13, 2019 at 11:35:15PM +0800, Frank Lee wrote: > On Thu, Jun 13, 2019 at 9:26 PM Maxime Ripard wrote: > > > > On Fri, Jun 07, 2019 at 09:34:44PM +0800, Frank Lee wrote: > > > On Mon, May 27, 2019 at 8:27 PM Maxime Ripard wrote: > > > > > + ret = devm_request_threaded_irq(dev, irq, NULL, > > > > > + tmdev->chip->irq_thread, > > > > > + IRQF_ONESHOT, "ths", tmdev); > > > > > + if (ret) > > > > > + return ret; > > > > > > > > Is there any particular reason to use a threaded interrupt? > > > > > > Just to improve real-time. > > > > What do you mean by real-time here? If anything, that will increase > > the latency of the interrupts here. > > > > And in preempt-rt, regular top-half interrupts will be forced into a > > threaded interrupt anyway. > > > > > > > +static int sun8i_ths_remove(struct platform_device *pdev) > > > > > +{ > > > > > + struct ths_device *tmdev = platform_get_drvdata(pdev); > > > > > + > > > > > + clk_disable_unprepare(tmdev->bus_clk); > > > > > > > > I know that we discussed that already, but I'm not sure why you switch > > > > back to a regular call to regmap_init_mmio, while regmap_init_mmio_clk > > > > will take care of enabling and disabling the bus clock for you? > > > > > > It seems that regmap_init_mmio_clk just get clk and prepare clk > > > but no enable. > > > > At init time, yes. But it will enable it only when you access the > > registers, which is what you want anyway. > > But after accessing the register, it turns the clock off, which > affects the ad conversion and the occurrence of the interrupt. Ah, so that's how it works. Yeah, it makes sense then. > In addition, when resuming from suspend, we need to enable > the clock, so I think it is necessary to have a clock pointer. Yep, indeed. Maxime -- Maxime Ripard, Bootlin Embedded Linux and Kernel engineering https://bootlin.com