Lines Matching refs:pdata
75 struct mxc_rtc_data *pdata = dev_get_drvdata(dev); in mxc_rtc_interrupt() local
76 void __iomem *ioaddr = pdata->ioaddr; in mxc_rtc_interrupt()
80 spin_lock(&pdata->lock); in mxc_rtc_interrupt()
81 if (clk_enable(pdata->clk)) { in mxc_rtc_interrupt()
82 spin_unlock(&pdata->lock); in mxc_rtc_interrupt()
92 rtc_update_irq(pdata->rtc, 1, RTC_AF | RTC_IRQF); in mxc_rtc_interrupt()
105 clk_disable(pdata->clk); in mxc_rtc_interrupt()
106 spin_unlock(&pdata->lock); in mxc_rtc_interrupt()
114 static int mxc_rtc_lock(struct mxc_rtc_data *const pdata) in mxc_rtc_lock() argument
118 spin_lock_irq(&pdata->lock); in mxc_rtc_lock()
119 ret = clk_enable(pdata->clk); in mxc_rtc_lock()
121 spin_unlock_irq(&pdata->lock); in mxc_rtc_lock()
127 static int mxc_rtc_unlock(struct mxc_rtc_data *const pdata) in mxc_rtc_unlock() argument
129 clk_disable(pdata->clk); in mxc_rtc_unlock()
130 spin_unlock_irq(&pdata->lock); in mxc_rtc_unlock()
143 struct mxc_rtc_data *pdata = dev_get_drvdata(dev); in mxc_rtc_read_time() local
144 const int clk_failed = clk_enable(pdata->clk); in mxc_rtc_read_time()
147 const time64_t now = readl(pdata->ioaddr + SRTC_LPSCMR); in mxc_rtc_read_time()
150 clk_disable(pdata->clk); in mxc_rtc_read_time()
165 struct mxc_rtc_data *pdata = dev_get_drvdata(dev); in mxc_rtc_set_time() local
169 ret = mxc_rtc_lock(pdata); in mxc_rtc_set_time()
173 writel(time, pdata->ioaddr + SRTC_LPSCMR); in mxc_rtc_set_time()
174 mxc_rtc_sync_lp_locked(dev, pdata->ioaddr); in mxc_rtc_set_time()
175 return mxc_rtc_unlock(pdata); in mxc_rtc_set_time()
189 struct mxc_rtc_data *pdata = dev_get_drvdata(dev); in mxc_rtc_read_alarm() local
190 void __iomem *ioaddr = pdata->ioaddr; in mxc_rtc_read_alarm()
193 ret = mxc_rtc_lock(pdata); in mxc_rtc_read_alarm()
199 return mxc_rtc_unlock(pdata); in mxc_rtc_read_alarm()
206 static void mxc_rtc_alarm_irq_enable_locked(struct mxc_rtc_data *pdata, in mxc_rtc_alarm_irq_enable_locked() argument
209 u32 lp_cr = readl(pdata->ioaddr + SRTC_LPCR); in mxc_rtc_alarm_irq_enable_locked()
216 writel(lp_cr, pdata->ioaddr + SRTC_LPCR); in mxc_rtc_alarm_irq_enable_locked()
221 struct mxc_rtc_data *pdata = dev_get_drvdata(dev); in mxc_rtc_alarm_irq_enable() local
222 int ret = mxc_rtc_lock(pdata); in mxc_rtc_alarm_irq_enable()
227 mxc_rtc_alarm_irq_enable_locked(pdata, enable); in mxc_rtc_alarm_irq_enable()
228 return mxc_rtc_unlock(pdata); in mxc_rtc_alarm_irq_enable()
241 struct mxc_rtc_data *pdata = dev_get_drvdata(dev); in mxc_rtc_set_alarm() local
242 int ret = mxc_rtc_lock(pdata); in mxc_rtc_set_alarm()
247 writel((u32)time, pdata->ioaddr + SRTC_LPSAR); in mxc_rtc_set_alarm()
250 writel(SRTC_LPSR_ALP, pdata->ioaddr + SRTC_LPSR); in mxc_rtc_set_alarm()
251 mxc_rtc_sync_lp_locked(dev, pdata->ioaddr); in mxc_rtc_set_alarm()
253 mxc_rtc_alarm_irq_enable_locked(pdata, alrm->enabled); in mxc_rtc_set_alarm()
254 mxc_rtc_sync_lp_locked(dev, pdata->ioaddr); in mxc_rtc_set_alarm()
255 mxc_rtc_unlock(pdata); in mxc_rtc_set_alarm()
280 struct mxc_rtc_data *pdata; in mxc_rtc_probe() local
284 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); in mxc_rtc_probe()
285 if (!pdata) in mxc_rtc_probe()
288 pdata->ioaddr = devm_platform_ioremap_resource(pdev, 0); in mxc_rtc_probe()
289 if (IS_ERR(pdata->ioaddr)) in mxc_rtc_probe()
290 return PTR_ERR(pdata->ioaddr); in mxc_rtc_probe()
292 ioaddr = pdata->ioaddr; in mxc_rtc_probe()
294 pdata->clk = devm_clk_get(&pdev->dev, NULL); in mxc_rtc_probe()
295 if (IS_ERR(pdata->clk)) { in mxc_rtc_probe()
297 return PTR_ERR(pdata->clk); in mxc_rtc_probe()
300 spin_lock_init(&pdata->lock); in mxc_rtc_probe()
301 pdata->irq = platform_get_irq(pdev, 0); in mxc_rtc_probe()
302 if (pdata->irq < 0) in mxc_rtc_probe()
303 return pdata->irq; in mxc_rtc_probe()
306 ret = dev_pm_set_wake_irq(&pdev->dev, pdata->irq); in mxc_rtc_probe()
310 ret = clk_prepare_enable(pdata->clk); in mxc_rtc_probe()
324 clk_disable_unprepare(pdata->clk); in mxc_rtc_probe()
334 clk_disable_unprepare(pdata->clk); in mxc_rtc_probe()
338 pdata->rtc = devm_rtc_allocate_device(&pdev->dev); in mxc_rtc_probe()
339 if (IS_ERR(pdata->rtc)) { in mxc_rtc_probe()
340 clk_disable_unprepare(pdata->clk); in mxc_rtc_probe()
341 return PTR_ERR(pdata->rtc); in mxc_rtc_probe()
344 pdata->rtc->ops = &mxc_rtc_ops; in mxc_rtc_probe()
345 pdata->rtc->range_max = U32_MAX; in mxc_rtc_probe()
347 clk_disable(pdata->clk); in mxc_rtc_probe()
348 platform_set_drvdata(pdev, pdata); in mxc_rtc_probe()
350 devm_request_irq(&pdev->dev, pdata->irq, mxc_rtc_interrupt, 0, in mxc_rtc_probe()
354 clk_unprepare(pdata->clk); in mxc_rtc_probe()
358 ret = devm_rtc_register_device(pdata->rtc); in mxc_rtc_probe()
360 clk_unprepare(pdata->clk); in mxc_rtc_probe()
367 struct mxc_rtc_data *pdata = platform_get_drvdata(pdev); in mxc_rtc_remove() local
369 clk_disable_unprepare(pdata->clk); in mxc_rtc_remove()