Lines Matching refs:config
88 static inline void spear_rtc_clear_interrupt(struct spear_rtc_config *config)
93 spin_lock_irqsave(&config->lock, flags);
94 val = readl(config->ioaddr + STATUS_REG);
96 writel(val, config->ioaddr + STATUS_REG);
97 spin_unlock_irqrestore(&config->lock, flags);
100 static inline void spear_rtc_enable_interrupt(struct spear_rtc_config *config)
104 val = readl(config->ioaddr + CTRL_REG);
106 spear_rtc_clear_interrupt(config);
108 writel(val, config->ioaddr + CTRL_REG);
112 static inline void spear_rtc_disable_interrupt(struct spear_rtc_config *config)
116 val = readl(config->ioaddr + CTRL_REG);
119 writel(val, config->ioaddr + CTRL_REG);
123 static inline int is_write_complete(struct spear_rtc_config *config)
128 spin_lock_irqsave(&config->lock, flags);
129 if ((readl(config->ioaddr + STATUS_REG)) & STATUS_FAIL)
131 spin_unlock_irqrestore(&config->lock, flags);
136 static void rtc_wait_not_busy(struct spear_rtc_config *config)
143 spin_lock_irqsave(&config->lock, flags);
144 status = readl(config->ioaddr + STATUS_REG);
145 spin_unlock_irqrestore(&config->lock, flags);
155 struct spear_rtc_config *config = dev_id;
159 spin_lock_irqsave(&config->lock, flags);
160 irq_data = readl(config->ioaddr + STATUS_REG);
161 spin_unlock_irqrestore(&config->lock, flags);
164 spear_rtc_clear_interrupt(config);
166 rtc_update_irq(config->rtc, 1, events);
204 struct spear_rtc_config *config = dev_get_drvdata(dev);
208 rtc_wait_not_busy(config);
210 time = readl(config->ioaddr + TIME_REG);
211 date = readl(config->ioaddr + DATE_REG);
233 struct spear_rtc_config *config = dev_get_drvdata(dev);
238 rtc_wait_not_busy(config);
243 writel(time, config->ioaddr + TIME_REG);
244 writel(date, config->ioaddr + DATE_REG);
246 return is_write_complete(config);
259 struct spear_rtc_config *config = dev_get_drvdata(dev);
262 rtc_wait_not_busy(config);
264 time = readl(config->ioaddr + ALARM_TIME_REG);
265 date = readl(config->ioaddr + ALARM_DATE_REG);
274 alm->enabled = readl(config->ioaddr + CTRL_REG) & INT_ENABLE;
289 struct spear_rtc_config *config = dev_get_drvdata(dev);
295 rtc_wait_not_busy(config);
302 writel(time, config->ioaddr + ALARM_TIME_REG);
303 writel(date, config->ioaddr + ALARM_DATE_REG);
304 err = is_write_complete(config);
309 spear_rtc_enable_interrupt(config);
311 spear_rtc_disable_interrupt(config);
318 struct spear_rtc_config *config = dev_get_drvdata(dev);
321 spear_rtc_clear_interrupt(config);
326 spear_rtc_disable_interrupt(config);
330 spear_rtc_enable_interrupt(config);
350 struct spear_rtc_config *config;
354 config = devm_kzalloc(&pdev->dev, sizeof(*config), GFP_KERNEL);
355 if (!config)
364 config);
371 config->ioaddr = devm_platform_ioremap_resource(pdev, 0);
372 if (IS_ERR(config->ioaddr))
373 return PTR_ERR(config->ioaddr);
375 config->clk = devm_clk_get(&pdev->dev, NULL);
376 if (IS_ERR(config->clk))
377 return PTR_ERR(config->clk);
379 status = clk_prepare_enable(config->clk);
383 spin_lock_init(&config->lock);
384 platform_set_drvdata(pdev, config);
386 config->rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
388 if (IS_ERR(config->rtc)) {
390 PTR_ERR(config->rtc));
391 status = PTR_ERR(config->rtc);
395 config->rtc->uie_unsupported = 1;
403 clk_disable_unprepare(config->clk);
410 struct spear_rtc_config *config = platform_get_drvdata(pdev);
412 spear_rtc_disable_interrupt(config);
413 clk_disable_unprepare(config->clk);
423 struct spear_rtc_config *config = platform_get_drvdata(pdev);
429 config->irq_wake = 1;
431 spear_rtc_disable_interrupt(config);
432 clk_disable(config->clk);
441 struct spear_rtc_config *config = platform_get_drvdata(pdev);
447 if (config->irq_wake) {
449 config->irq_wake = 0;
452 clk_enable(config->clk);
453 spear_rtc_enable_interrupt(config);
464 struct spear_rtc_config *config = platform_get_drvdata(pdev);
466 spear_rtc_disable_interrupt(config);
467 clk_disable(config->clk);