static int rv3029c2_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct rtc_device *rtc; int rc = 0; u8 buf[1]; if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_EMUL)) return -ENODEV; rtc = devm_rtc_device_register(&client->dev, client->name, &rv3029c2_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) return PTR_ERR(rtc); i2c_set_clientdata(client, rtc); rc = rv3029c2_i2c_get_sr(client, buf); if (rc < 0) { dev_err(&client->dev, "reading status failed\n"); return rc; } return 0; }
static int da9052_rtc_probe(struct platform_device *pdev) { struct da9052_rtc *rtc; int ret; rtc = devm_kzalloc(&pdev->dev, sizeof(struct da9052_rtc), GFP_KERNEL); if (!rtc) return -ENOMEM; rtc->da9052 = dev_get_drvdata(pdev->dev.parent); platform_set_drvdata(pdev, rtc); ret = da9052_reg_write(rtc->da9052, DA9052_BBAT_CONT_REG, 0xFE); if (ret < 0) { rtc_err(rtc, "Failed to setup RTC battery charging: %d\n", ret); return ret; } ret = da9052_reg_update(rtc->da9052, DA9052_ALARM_Y_REG, DA9052_ALARM_Y_TICK_ON, 0); if (ret != 0) rtc_err(rtc, "Failed to disable TICKS: %d\n", ret); ret = da9052_request_irq(rtc->da9052, DA9052_IRQ_ALARM, "ALM", da9052_rtc_irq, rtc); if (ret != 0) { rtc_err(rtc, "irq registration failed: %d\n", ret); return ret; } rtc->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, &da9052_rtc_ops, THIS_MODULE); return PTR_ERR_OR_ZERO(rtc->rtc); }
static int ds1553_rtc_probe(struct platform_device *pdev) { struct rtc_device *rtc; struct resource *res; unsigned int cen, sec; struct rtc_plat_data *pdata; void __iomem *ioaddr; int ret = 0; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) return -ENODEV; pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); if (!pdata) return -ENOMEM; if (!devm_request_mem_region(&pdev->dev, res->start, RTC_REG_SIZE, pdev->name)) return -EBUSY; ioaddr = devm_ioremap(&pdev->dev, res->start, RTC_REG_SIZE); if (!ioaddr) return -ENOMEM; pdata->ioaddr = ioaddr; pdata->irq = platform_get_irq(pdev, 0); /* turn RTC on if it was not on */ sec = readb(ioaddr + RTC_SECONDS); if (sec & RTC_STOP) { sec &= RTC_SECONDS_MASK; cen = readb(ioaddr + RTC_CENTURY) & RTC_CENTURY_MASK; writeb(RTC_WRITE, ioaddr + RTC_CONTROL); writeb(sec, ioaddr + RTC_SECONDS); writeb(cen & RTC_CENTURY_MASK, ioaddr + RTC_CONTROL); } if (readb(ioaddr + RTC_FLAGS) & RTC_FLAGS_BLF) dev_warn(&pdev->dev, "voltage-low detected.\n"); spin_lock_init(&pdata->lock); pdata->last_jiffies = jiffies; platform_set_drvdata(pdev, pdata); if (pdata->irq > 0) { writeb(0, ioaddr + RTC_INTERRUPTS); if (devm_request_irq(&pdev->dev, pdata->irq, ds1553_rtc_interrupt, 0, pdev->name, pdev) < 0) { dev_warn(&pdev->dev, "interrupt not available.\n"); pdata->irq = 0; } } rtc = devm_rtc_device_register(&pdev->dev, pdev->name, &ds1553_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) return PTR_ERR(rtc); pdata->rtc = rtc; ret = sysfs_create_bin_file(&pdev->dev.kobj, &ds1553_nvram_attr); return ret; }
static int __init pcap_rtc_probe(struct platform_device *pdev) { struct pcap_rtc *pcap_rtc; int timer_irq, alarm_irq; int err = -ENOMEM; pcap_rtc = devm_kzalloc(&pdev->dev, sizeof(struct pcap_rtc), GFP_KERNEL); if (!pcap_rtc) return err; pcap_rtc->pcap = dev_get_drvdata(pdev->dev.parent); platform_set_drvdata(pdev, pcap_rtc); pcap_rtc->rtc = devm_rtc_device_register(&pdev->dev, "pcap", &pcap_rtc_ops, THIS_MODULE); if (IS_ERR(pcap_rtc->rtc)) return PTR_ERR(pcap_rtc->rtc); timer_irq = pcap_to_irq(pcap_rtc->pcap, PCAP_IRQ_1HZ); alarm_irq = pcap_to_irq(pcap_rtc->pcap, PCAP_IRQ_TODA); err = devm_request_irq(&pdev->dev, timer_irq, pcap_rtc_irq, 0, "RTC Timer", pcap_rtc); if (err) return err; err = devm_request_irq(&pdev->dev, alarm_irq, pcap_rtc_irq, 0, "RTC Alarm", pcap_rtc); if (err) return err; return 0; }
static int pcf2127_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct pcf2127 *pcf2127; dev_dbg(&client->dev, "%s\n", __func__); if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) return -ENODEV; pcf2127 = devm_kzalloc(&client->dev, sizeof(struct pcf2127), GFP_KERNEL); if (!pcf2127) return -ENOMEM; dev_info(&client->dev, "chip found, driver version " DRV_VERSION "\n"); i2c_set_clientdata(client, pcf2127); pcf2127->rtc = devm_rtc_device_register(&client->dev, pcf2127_driver.driver.name, &pcf2127_rtc_ops, THIS_MODULE); return PTR_ERR_OR_ZERO(pcf2127->rtc); }
static int __init tx4939_rtc_probe(struct platform_device *pdev) { struct rtc_device *rtc; struct tx4939rtc_plat_data *pdata; struct resource *res; int irq, ret; irq = platform_get_irq(pdev, 0); if (irq < 0) return -ENODEV; pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); if (!pdata) return -ENOMEM; platform_set_drvdata(pdev, pdata); res = platform_get_resource(pdev, IORESOURCE_MEM, 0); pdata->rtcreg = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(pdata->rtcreg)) return PTR_ERR(pdata->rtcreg); spin_lock_init(&pdata->lock); tx4939_rtc_cmd(pdata->rtcreg, TX4939_RTCCTL_COMMAND_NOP); if (devm_request_irq(&pdev->dev, irq, tx4939_rtc_interrupt, 0, pdev->name, &pdev->dev) < 0) return -EBUSY; rtc = devm_rtc_device_register(&pdev->dev, pdev->name, &tx4939_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) return PTR_ERR(rtc); pdata->rtc = rtc; ret = sysfs_create_bin_file(&pdev->dev.kobj, &tx4939_rtc_nvram_attr); return ret; }
/* * Initialize and install RTC driver */ static int __init at91_rtc_probe(struct platform_device *pdev) { struct rtc_device *rtc; struct resource *regs; int ret = 0; at91_rtc_config = at91_rtc_get_config(pdev); if (!at91_rtc_config) return -ENODEV; regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!regs) { dev_err(&pdev->dev, "no mmio resource defined\n"); return -ENXIO; } irq = platform_get_irq(pdev, 0); if (irq < 0) { dev_err(&pdev->dev, "no irq resource defined\n"); return -ENXIO; } at91_rtc_regs = devm_ioremap(&pdev->dev, regs->start, resource_size(regs)); if (!at91_rtc_regs) { dev_err(&pdev->dev, "failed to map registers, aborting.\n"); return -ENOMEM; } at91_rtc_write(AT91_RTC_CR, 0); at91_rtc_write(AT91_RTC_MR, 0); /* 24 hour mode */ /* Disable all interrupts */ at91_rtc_write_idr(AT91_RTC_ACKUPD | AT91_RTC_ALARM | AT91_RTC_SECEV | AT91_RTC_TIMEV | AT91_RTC_CALEV); ret = devm_request_irq(&pdev->dev, irq, at91_rtc_interrupt, IRQF_SHARED, "at91_rtc", pdev); if (ret) { dev_err(&pdev->dev, "IRQ %d already in use.\n", irq); return ret; } /* cpu init code should really have flagged this device as * being wake-capable; if it didn't, do that here. */ if (!device_can_wakeup(&pdev->dev)) device_init_wakeup(&pdev->dev, 1); rtc = devm_rtc_device_register(&pdev->dev, pdev->name, &at91_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) return PTR_ERR(rtc); platform_set_drvdata(pdev, rtc); dev_info(&pdev->dev, "AT91 Real Time Clock driver.\n"); return 0; }
static int __init ds1302_rtc_probe(struct platform_device *pdev) { struct rtc_device *rtc; if (ds1302_hw_init()) { dev_err(&pdev->dev, "Failed to init communication channel"); return -EINVAL; } /* Reset */ ds1302_reset(); /* Write a magic value to the DS1302 RAM, and see if it sticks. */ ds1302_writebyte(RTC_ADDR_RAM0, 0x42); if (ds1302_readbyte(RTC_ADDR_RAM0) != 0x42) { dev_err(&pdev->dev, "Failed to probe"); return -ENODEV; } rtc = devm_rtc_device_register(&pdev->dev, "ds1302", &ds1302_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) return PTR_ERR(rtc); platform_set_drvdata(pdev, rtc); return 0; }
static int __init msm6242_rtc_probe(struct platform_device *pdev) { struct resource *res; struct msm6242_priv *priv; struct rtc_device *rtc; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) return -ENODEV; priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; priv->regs = devm_ioremap(&pdev->dev, res->start, resource_size(res)); if (!priv->regs) return -ENOMEM; platform_set_drvdata(pdev, priv); rtc = devm_rtc_device_register(&pdev->dev, "rtc-msm6242", &msm6242_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) return PTR_ERR(rtc); priv->rtc = rtc; return 0; }
static int ds3232_probe(struct device *dev, struct regmap *regmap, int irq, const char *name) { struct ds3232 *ds3232; int ret; ds3232 = devm_kzalloc(dev, sizeof(*ds3232), GFP_KERNEL); if (!ds3232) return -ENOMEM; ds3232->regmap = regmap; ds3232->irq = irq; ds3232->dev = dev; dev_set_drvdata(dev, ds3232); ret = ds3232_check_rtc_status(dev); if (ret) return ret; if (ds3232->irq > 0) { ret = devm_request_threaded_irq(dev, ds3232->irq, NULL, ds3232_irq, IRQF_SHARED | IRQF_ONESHOT, name, dev); if (ret) { ds3232->irq = 0; dev_err(dev, "unable to request IRQ\n"); } else device_init_wakeup(dev, 1); } ds3232->rtc = devm_rtc_device_register(dev, name, &ds3232_rtc_ops, THIS_MODULE); return PTR_ERR_OR_ZERO(ds3232->rtc); }
static int __init ds1216_rtc_probe(struct platform_device *pdev) { struct resource *res; struct ds1216_priv *priv; u8 dummy[8]; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) return -ENODEV; priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; platform_set_drvdata(pdev, priv); priv->ioaddr = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(priv->ioaddr)) return PTR_ERR(priv->ioaddr); priv->rtc = devm_rtc_device_register(&pdev->dev, "ds1216", &ds1216_rtc_ops, THIS_MODULE); if (IS_ERR(priv->rtc)) return PTR_ERR(priv->rtc); /* dummy read to get clock into a known state */ ds1216_read(priv->ioaddr, dummy); return 0; }
static int ds1390_probe(struct spi_device *spi) { unsigned char tmp; struct ds1390 *chip; int res; spi->mode = SPI_MODE_3; spi->bits_per_word = 8; spi_setup(spi); chip = devm_kzalloc(&spi->dev, sizeof(*chip), GFP_KERNEL); if (!chip) { dev_err(&spi->dev, "unable to allocate device memory\n"); return -ENOMEM; } spi_set_drvdata(spi, chip); res = ds1390_get_reg(&spi->dev, DS1390_REG_SECONDS, &tmp); if (res != 0) { dev_err(&spi->dev, "unable to read device\n"); return res; } chip->rtc = devm_rtc_device_register(&spi->dev, "ds1390", &ds1390_rtc_ops, THIS_MODULE); if (IS_ERR(chip->rtc)) { dev_err(&spi->dev, "unable to register device\n"); res = PTR_ERR(chip->rtc); } return res; }
static int pcf8523_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct pcf8523 *pcf; int err; if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) return -ENODEV; pcf = devm_kzalloc(&client->dev, sizeof(*pcf), GFP_KERNEL); if (!pcf) return -ENOMEM; err = pcf8523_select_capacitance(client, true); if (err < 0) return err; err = pcf8523_set_pm(client, 0); if (err < 0) return err; pcf->rtc = devm_rtc_device_register(&client->dev, DRIVER_NAME, &pcf8523_rtc_ops, THIS_MODULE); if (IS_ERR(pcf->rtc)) return PTR_ERR(pcf->rtc); i2c_set_clientdata(client, pcf); return 0; }
static int test_probe(struct platform_device *plat_dev) { int err; struct rtc_device *rtc; if (test_mmss64) { test_rtc_ops.set_mmss64 = test_rtc_set_mmss64; test_rtc_ops.set_mmss = NULL; } rtc = devm_rtc_device_register(&plat_dev->dev, "test", &test_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) { return PTR_ERR(rtc); } err = device_create_file(&plat_dev->dev, &dev_attr_irq); if (err) dev_err(&plat_dev->dev, "Unable to create sysfs entry: %s\n", dev_attr_irq.attr.name); platform_set_drvdata(plat_dev, rtc); return 0; }
static int mcp795_probe(struct spi_device *spi) { struct rtc_device *rtc; int ret; spi->mode = SPI_MODE_0; spi->bits_per_word = 8; ret = spi_setup(spi); if (ret) { dev_err(&spi->dev, "Unable to setup SPI\n"); return ret; } /* Start the oscillator */ mcp795_rtcc_set_bits(&spi->dev, 0x01, MCP795_ST_BIT, MCP795_ST_BIT); /* Clear the 12 hour mode flag*/ mcp795_rtcc_set_bits(&spi->dev, 0x03, MCP795_24_BIT, 0); rtc = devm_rtc_device_register(&spi->dev, "rtc-mcp795", &mcp795_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) return PTR_ERR(rtc); spi_set_drvdata(spi, rtc); return 0; }
static int cpcap_rtc_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct cpcap_rtc *rtc; int err; rtc = devm_kzalloc(dev, sizeof(*rtc), GFP_KERNEL); if (!rtc) return -ENOMEM; rtc->regmap = dev_get_regmap(dev->parent, NULL); if (!rtc->regmap) return -ENODEV; platform_set_drvdata(pdev, rtc); rtc->rtc_dev = devm_rtc_device_register(dev, "cpcap_rtc", &cpcap_rtc_ops, THIS_MODULE); if (IS_ERR(rtc->rtc_dev)) return PTR_ERR(rtc->rtc_dev); err = cpcap_get_vendor(dev, rtc->regmap, &rtc->vendor); if (err) return err; rtc->alarm_irq = platform_get_irq(pdev, 0); err = devm_request_threaded_irq(dev, rtc->alarm_irq, NULL, cpcap_rtc_alarm_irq, IRQF_TRIGGER_NONE, "rtc_alarm", rtc); if (err) { dev_err(dev, "Could not request alarm irq: %d\n", err); return err; } disable_irq(rtc->alarm_irq); /* Stock Android uses the 1 Hz interrupt for "secure clock daemon", * which is not supported by the mainline kernel. The mainline kernel * does not use the irq at the moment, but we explicitly request and * disable it, so that its masked and does not wake up the processor * every second. */ rtc->update_irq = platform_get_irq(pdev, 1); err = devm_request_threaded_irq(dev, rtc->update_irq, NULL, cpcap_rtc_update_irq, IRQF_TRIGGER_NONE, "rtc_1hz", rtc); if (err) { dev_err(dev, "Could not request update irq: %d\n", err); return err; } disable_irq(rtc->update_irq); err = device_init_wakeup(dev, 1); if (err) { dev_err(dev, "wakeup initialization failed (%d)\n", err); /* ignore error and continue without wakeup support */ } return 0; }
static int stmp3xxx_rtc_probe(struct platform_device *pdev) { struct stmp3xxx_rtc_data *rtc_data; struct resource *r; int err; rtc_data = devm_kzalloc(&pdev->dev, sizeof(*rtc_data), GFP_KERNEL); if (!rtc_data) return -ENOMEM; r = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!r) { dev_err(&pdev->dev, "failed to get resource\n"); return -ENXIO; } rtc_data->io = devm_ioremap(&pdev->dev, r->start, resource_size(r)); if (!rtc_data->io) { dev_err(&pdev->dev, "ioremap failed\n"); return -EIO; } rtc_data->irq_alarm = platform_get_irq(pdev, 0); if (!(readl(STMP3XXX_RTC_STAT + rtc_data->io) & STMP3XXX_RTC_STAT_RTC_PRESENT)) { dev_err(&pdev->dev, "no device onboard\n"); return -ENODEV; } platform_set_drvdata(pdev, rtc_data); stmp_reset_block(rtc_data->io); writel(STMP3XXX_RTC_PERSISTENT0_ALARM_EN | STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN | STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE, rtc_data->io + STMP3XXX_RTC_PERSISTENT0_CLR); writel(STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN | STMP3XXX_RTC_CTRL_ALARM_IRQ_EN, rtc_data->io + STMP3XXX_RTC_CTRL_CLR); rtc_data->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, &stmp3xxx_rtc_ops, THIS_MODULE); if (IS_ERR(rtc_data->rtc)) return PTR_ERR(rtc_data->rtc); err = devm_request_irq(&pdev->dev, rtc_data->irq_alarm, stmp3xxx_rtc_interrupt, 0, "RTC alarm", &pdev->dev); if (err) { dev_err(&pdev->dev, "Cannot claim IRQ%d\n", rtc_data->irq_alarm); return err; } stmp3xxx_wdt_register(pdev); return 0; }
static int xlnx_rtc_probe(struct platform_device *pdev) { struct xlnx_rtc_dev *xrtcdev; struct resource *res; int ret; xrtcdev = devm_kzalloc(&pdev->dev, sizeof(*xrtcdev), GFP_KERNEL); if (!xrtcdev) return -ENOMEM; platform_set_drvdata(pdev, xrtcdev); res = platform_get_resource(pdev, IORESOURCE_MEM, 0); xrtcdev->reg_base = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(xrtcdev->reg_base)) return PTR_ERR(xrtcdev->reg_base); xrtcdev->alarm_irq = platform_get_irq_byname(pdev, "alarm"); if (xrtcdev->alarm_irq < 0) { dev_err(&pdev->dev, "no irq resource\n"); return xrtcdev->alarm_irq; } ret = devm_request_irq(&pdev->dev, xrtcdev->alarm_irq, xlnx_rtc_interrupt, 0, dev_name(&pdev->dev), xrtcdev); if (ret) { dev_err(&pdev->dev, "request irq failed\n"); return ret; } xrtcdev->sec_irq = platform_get_irq_byname(pdev, "sec"); if (xrtcdev->sec_irq < 0) { dev_err(&pdev->dev, "no irq resource\n"); return xrtcdev->sec_irq; } ret = devm_request_irq(&pdev->dev, xrtcdev->sec_irq, xlnx_rtc_interrupt, 0, dev_name(&pdev->dev), xrtcdev); if (ret) { dev_err(&pdev->dev, "request irq failed\n"); return ret; } ret = of_property_read_u32(pdev->dev.of_node, "calibration", &xrtcdev->calibval); if (ret) xrtcdev->calibval = RTC_CALIB_DEF; xlnx_init_rtc(xrtcdev); device_init_wakeup(&pdev->dev, 1); xrtcdev->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, &xlnx_rtc_ops, THIS_MODULE); return PTR_ERR_OR_ZERO(xrtcdev->rtc); }
static int max8997_rtc_probe(struct platform_device *pdev) { struct max8997_dev *max8997 = dev_get_drvdata(pdev->dev.parent); struct max8997_rtc_info *info; int ret, virq; info = devm_kzalloc(&pdev->dev, sizeof(struct max8997_rtc_info), GFP_KERNEL); if (!info) return -ENOMEM; mutex_init(&info->lock); info->dev = &pdev->dev; info->max8997 = max8997; info->rtc = max8997->rtc; platform_set_drvdata(pdev, info); ret = max8997_rtc_init_reg(info); if (ret < 0) { dev_err(&pdev->dev, "Failed to initialize RTC reg:%d\n", ret); return ret; } max8997_rtc_enable_wtsr(info, true); max8997_rtc_enable_smpl(info, true); device_init_wakeup(&pdev->dev, 1); info->rtc_dev = devm_rtc_device_register(&pdev->dev, "max8997-rtc", &max8997_rtc_ops, THIS_MODULE); if (IS_ERR(info->rtc_dev)) { ret = PTR_ERR(info->rtc_dev); dev_err(&pdev->dev, "Failed to register RTC device: %d\n", ret); return ret; } virq = irq_create_mapping(max8997->irq_domain, MAX8997_PMICIRQ_RTCA1); if (!virq) { dev_err(&pdev->dev, "Failed to create mapping alarm IRQ\n"); ret = -ENXIO; goto err_out; } info->virq = virq; ret = devm_request_threaded_irq(&pdev->dev, virq, NULL, max8997_rtc_alarm_irq, 0, "rtc-alarm0", info); if (ret < 0) dev_err(&pdev->dev, "Failed to request alarm IRQ: %d: %d\n", info->virq, ret); err_out: return ret; }
static int __init davinci_rtc_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct davinci_rtc *davinci_rtc; struct resource *res; int ret = 0; davinci_rtc = devm_kzalloc(&pdev->dev, sizeof(struct davinci_rtc), GFP_KERNEL); if (!davinci_rtc) return -ENOMEM; davinci_rtc->irq = platform_get_irq(pdev, 0); if (davinci_rtc->irq < 0) { dev_err(dev, "no RTC irq\n"); return davinci_rtc->irq; } res = platform_get_resource(pdev, IORESOURCE_MEM, 0); davinci_rtc->base = devm_ioremap_resource(dev, res); if (IS_ERR(davinci_rtc->base)) return PTR_ERR(davinci_rtc->base); platform_set_drvdata(pdev, davinci_rtc); davinci_rtc->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, &davinci_rtc_ops, THIS_MODULE); if (IS_ERR(davinci_rtc->rtc)) { dev_err(dev, "unable to register RTC device, err %d\n", ret); return PTR_ERR(davinci_rtc->rtc); } rtcif_write(davinci_rtc, PRTCIF_INTFLG_RTCSS, PRTCIF_INTFLG); rtcif_write(davinci_rtc, 0, PRTCIF_INTEN); rtcss_write(davinci_rtc, 0, PRTCSS_RTC_INTC_EXTENA1); rtcss_write(davinci_rtc, 0, PRTCSS_RTC_CTRL); rtcss_write(davinci_rtc, 0, PRTCSS_RTC_CCTRL); ret = devm_request_irq(dev, davinci_rtc->irq, davinci_rtc_interrupt, 0, "davinci_rtc", davinci_rtc); if (ret < 0) { dev_err(dev, "unable to register davinci RTC interrupt\n"); return ret; } /* Enable interrupts */ rtcif_write(davinci_rtc, PRTCIF_INTEN_RTCSS, PRTCIF_INTEN); rtcss_write(davinci_rtc, PRTCSS_RTC_INTC_EXTENA1_MASK, PRTCSS_RTC_INTC_EXTENA1); rtcss_write(davinci_rtc, PRTCSS_RTC_CCTRL_CAEN, PRTCSS_RTC_CCTRL); device_init_wakeup(&pdev->dev, 0); return 0; }
static int ds1742_rtc_probe(struct platform_device *pdev) { struct rtc_device *rtc; struct resource *res; unsigned int cen, sec; struct rtc_plat_data *pdata; void __iomem *ioaddr; int ret = 0; pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); if (!pdata) return -ENOMEM; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ioaddr = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(ioaddr)) return PTR_ERR(ioaddr); pdata->ioaddr_nvram = ioaddr; pdata->size_nvram = resource_size(res) - RTC_SIZE; pdata->ioaddr_rtc = ioaddr + pdata->size_nvram; sysfs_bin_attr_init(&pdata->nvram_attr); pdata->nvram_attr.attr.name = "nvram"; pdata->nvram_attr.attr.mode = S_IRUGO | S_IWUSR; pdata->nvram_attr.read = ds1742_nvram_read; pdata->nvram_attr.write = ds1742_nvram_write; pdata->nvram_attr.size = pdata->size_nvram; /* turn RTC on if it was not on */ ioaddr = pdata->ioaddr_rtc; sec = readb(ioaddr + RTC_SECONDS); if (sec & RTC_STOP) { sec &= RTC_SECONDS_MASK; cen = readb(ioaddr + RTC_CENTURY) & RTC_CENTURY_MASK; writeb(RTC_WRITE, ioaddr + RTC_CONTROL); writeb(sec, ioaddr + RTC_SECONDS); writeb(cen & RTC_CENTURY_MASK, ioaddr + RTC_CONTROL); } if (!(readb(ioaddr + RTC_DAY) & RTC_BATT_FLAG)) dev_warn(&pdev->dev, "voltage-low detected.\n"); pdata->last_jiffies = jiffies; platform_set_drvdata(pdev, pdata); rtc = devm_rtc_device_register(&pdev->dev, pdev->name, &ds1742_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) return PTR_ERR(rtc); ret = sysfs_create_bin_file(&pdev->dev.kobj, &pdata->nvram_attr); if (ret) dev_err(&pdev->dev, "Unable to create sysfs entry: %s\n", pdata->nvram_attr.attr.name); return 0; }
static int jz4740_rtc_probe(struct platform_device *pdev) { int ret; struct jz4740_rtc *rtc; uint32_t scratchpad; struct resource *mem; rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); if (!rtc) return -ENOMEM; rtc->irq = platform_get_irq(pdev, 0); if (rtc->irq < 0) { dev_err(&pdev->dev, "Failed to get platform irq\n"); return -ENOENT; } mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); rtc->base = devm_ioremap_resource(&pdev->dev, mem); if (IS_ERR(rtc->base)) return PTR_ERR(rtc->base); spin_lock_init(&rtc->lock); platform_set_drvdata(pdev, rtc); device_init_wakeup(&pdev->dev, 1); rtc->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, &jz4740_rtc_ops, THIS_MODULE); if (IS_ERR(rtc->rtc)) { ret = PTR_ERR(rtc->rtc); dev_err(&pdev->dev, "Failed to register rtc device: %d\n", ret); return ret; } ret = devm_request_irq(&pdev->dev, rtc->irq, jz4740_rtc_irq, 0, pdev->name, rtc); if (ret) { dev_err(&pdev->dev, "Failed to request rtc irq: %d\n", ret); return ret; } scratchpad = jz4740_rtc_reg_read(rtc, JZ_REG_RTC_SCRATCHPAD); if (scratchpad != 0x12345678) { ret = jz4740_rtc_reg_write(rtc, JZ_REG_RTC_SCRATCHPAD, 0x12345678); ret = jz4740_rtc_reg_write(rtc, JZ_REG_RTC_SEC, 0); if (ret) { dev_err(&pdev->dev, "Could not write write to RTC registers\n"); return ret; } } return 0; }
static int rc5t583_rtc_probe(struct platform_device *pdev) { struct rc5t583 *rc5t583 = dev_get_drvdata(pdev->dev.parent); struct rc5t583_rtc *ricoh_rtc; struct rc5t583_platform_data *pmic_plat_data; int ret; int irq; ricoh_rtc = devm_kzalloc(&pdev->dev, sizeof(struct rc5t583_rtc), GFP_KERNEL); if (!ricoh_rtc) return -ENOMEM; platform_set_drvdata(pdev, ricoh_rtc); /* Clear pending interrupts */ ret = regmap_write(rc5t583->regmap, RC5T583_RTC_CTL2, 0); if (ret < 0) return ret; /* clear RTC Adjust register */ ret = regmap_write(rc5t583->regmap, RC5T583_RTC_ADJ, 0); if (ret < 0) { dev_err(&pdev->dev, "unable to program rtc_adjust reg\n"); return -EBUSY; } pmic_plat_data = dev_get_platdata(rc5t583->dev); irq = pmic_plat_data->irq_base; if (irq <= 0) { dev_warn(&pdev->dev, "Wake up is not possible as irq = %d\n", irq); return ret; } irq += RC5T583_IRQ_YALE; ret = devm_request_threaded_irq(&pdev->dev, irq, NULL, rc5t583_rtc_interrupt, IRQF_TRIGGER_LOW, "rtc-rc5t583", &pdev->dev); if (ret < 0) { dev_err(&pdev->dev, "IRQ is not free.\n"); return ret; } device_init_wakeup(&pdev->dev, 1); ricoh_rtc->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, &rc5t583_rtc_ops, THIS_MODULE); if (IS_ERR(ricoh_rtc->rtc)) { ret = PTR_ERR(ricoh_rtc->rtc); dev_err(&pdev->dev, "RTC device register: err %d\n", ret); return ret; } return 0; }
static int rx8010_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); struct rx8010_data *rx8010; int err = 0; if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_I2C_BLOCK)) { dev_err(&adapter->dev, "doesn't support required functionality\n"); return -EIO; } rx8010 = devm_kzalloc(&client->dev, sizeof(struct rx8010_data), GFP_KERNEL); if (!rx8010) return -ENOMEM; rx8010->client = client; i2c_set_clientdata(client, rx8010); err = rx8010_init_client(client); if (err) return err; if (client->irq > 0) { dev_info(&client->dev, "IRQ %d supplied\n", client->irq); err = devm_request_threaded_irq(&client->dev, client->irq, NULL, rx8010_irq_1_handler, IRQF_TRIGGER_LOW | IRQF_ONESHOT, "rx8010", client); if (err) { dev_err(&client->dev, "unable to request IRQ\n"); client->irq = 0; } else { rx8010_rtc_ops.read_alarm = rx8010_read_alarm; rx8010_rtc_ops.set_alarm = rx8010_set_alarm; rx8010_rtc_ops.alarm_irq_enable = rx8010_alarm_irq_enable; } } rx8010->rtc = devm_rtc_device_register(&client->dev, client->name, &rx8010_rtc_ops, THIS_MODULE); if (IS_ERR(rx8010->rtc)) { dev_err(&client->dev, "unable to register the class device\n"); return PTR_ERR(rx8010->rtc); } rx8010->rtc->max_user_freq = 1; return err; }
static int xgene_rtc_probe(struct platform_device *pdev) { struct xgene_rtc_dev *pdata; struct resource *res; int ret; int irq; pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); if (!pdata) return -ENOMEM; platform_set_drvdata(pdev, pdata); pdata->dev = &pdev->dev; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); pdata->csr_base = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(pdata->csr_base)) return PTR_ERR(pdata->csr_base); irq = platform_get_irq(pdev, 0); if (irq < 0) { dev_err(&pdev->dev, "No IRQ resource\n"); return irq; } ret = devm_request_irq(&pdev->dev, irq, xgene_rtc_interrupt, 0, dev_name(&pdev->dev), pdata); if (ret) { dev_err(&pdev->dev, "Could not request IRQ\n"); return ret; } pdata->clk = devm_clk_get(&pdev->dev, NULL); if (IS_ERR(pdata->clk)) { dev_err(&pdev->dev, "Couldn't get the clock for RTC\n"); return -ENODEV; } clk_prepare_enable(pdata->clk); /* Turn on the clock and the crystal */ writel(RTC_CCR_EN, pdata->csr_base + RTC_CCR); device_init_wakeup(&pdev->dev, 1); pdata->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, &xgene_rtc_ops, THIS_MODULE); if (IS_ERR(pdata->rtc)) { clk_disable_unprepare(pdata->clk); return PTR_ERR(pdata->rtc); } /* HW does not support update faster than 1 seconds */ pdata->rtc->uie_unsupported = 1; return 0; }
static int hym8563_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct hym8563 *hym8563; int ret; hym8563 = devm_kzalloc(&client->dev, sizeof(*hym8563), GFP_KERNEL); if (!hym8563) return -ENOMEM; hym8563->client = client; i2c_set_clientdata(client, hym8563); device_set_wakeup_capable(&client->dev, true); ret = hym8563_init_device(client); if (ret) { dev_err(&client->dev, "could not init device, %d\n", ret); return ret; } ret = devm_request_threaded_irq(&client->dev, client->irq, NULL, hym8563_irq, IRQF_TRIGGER_LOW | IRQF_ONESHOT, client->name, hym8563); if (ret < 0) { dev_err(&client->dev, "irq %d request failed, %d\n", client->irq, ret); return ret; } /* check state of calendar information */ ret = i2c_smbus_read_byte_data(client, HYM8563_SEC); if (ret < 0) return ret; hym8563->valid = !(ret & HYM8563_SEC_VL); dev_dbg(&client->dev, "rtc information is %s\n", hym8563->valid ? "valid" : "invalid"); hym8563->rtc = devm_rtc_device_register(&client->dev, client->name, &hym8563_rtc_ops, THIS_MODULE); if (IS_ERR(hym8563->rtc)) return PTR_ERR(hym8563->rtc); /* the hym8563 alarm only supports a minute accuracy */ hym8563->rtc->uie_unsupported = 1; #ifdef CONFIG_COMMON_CLK hym8563_clkout_register_clk(hym8563); #endif return 0; }
static int hid_time_probe(struct platform_device *pdev) { int ret = 0; struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data; struct hid_time_state *time_state = devm_kzalloc(&pdev->dev, sizeof(struct hid_time_state), GFP_KERNEL); if (time_state == NULL) return -ENOMEM; platform_set_drvdata(pdev, time_state); spin_lock_init(&time_state->lock_last_time); init_completion(&time_state->comp_last_time); time_state->common_attributes.hsdev = hsdev; time_state->common_attributes.pdev = pdev; ret = hid_sensor_parse_common_attributes(hsdev, HID_USAGE_SENSOR_TIME, &time_state->common_attributes); if (ret) { dev_err(&pdev->dev, "failed to setup common attributes!\n"); return ret; } ret = hid_time_parse_report(pdev, hsdev, HID_USAGE_SENSOR_TIME, time_state); if (ret) { dev_err(&pdev->dev, "failed to setup attributes!\n"); return ret; } time_state->callbacks.send_event = hid_time_proc_event; time_state->callbacks.capture_sample = hid_time_capture_sample; time_state->callbacks.pdev = pdev; ret = sensor_hub_register_callback(hsdev, HID_USAGE_SENSOR_TIME, &time_state->callbacks); if (ret < 0) { dev_err(&pdev->dev, "register callback failed!\n"); return ret; } time_state->rtc = devm_rtc_device_register(&pdev->dev, "hid-sensor-time", &hid_time_rtc_ops, THIS_MODULE); if (IS_ERR(time_state->rtc)) { dev_err(&pdev->dev, "rtc device register failed!\n"); return PTR_ERR(time_state->rtc); } return ret; }
static int __init ps3_rtc_probe(struct platform_device *dev) { struct rtc_device *rtc; rtc = devm_rtc_device_register(&dev->dev, "rtc-ps3", &ps3_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) return PTR_ERR(rtc); platform_set_drvdata(dev, rtc); return 0; }
static int max8998_rtc_probe(struct platform_device *pdev) { struct max8998_dev *max8998 = dev_get_drvdata(pdev->dev.parent); struct max8998_platform_data *pdata = max8998->pdata; struct max8998_rtc_info *info; int ret; info = devm_kzalloc(&pdev->dev, sizeof(struct max8998_rtc_info), GFP_KERNEL); if (!info) return -ENOMEM; info->dev = &pdev->dev; info->max8998 = max8998; info->rtc = max8998->rtc; platform_set_drvdata(pdev, info); info->rtc_dev = devm_rtc_device_register(&pdev->dev, "max8998-rtc", &max8998_rtc_ops, THIS_MODULE); if (IS_ERR(info->rtc_dev)) { ret = PTR_ERR(info->rtc_dev); dev_err(&pdev->dev, "Failed to register RTC device: %d\n", ret); return ret; } if (!max8998->irq_domain) goto no_irq; info->irq = irq_create_mapping(max8998->irq_domain, MAX8998_IRQ_ALARM0); if (!info->irq) { dev_warn(&pdev->dev, "Failed to map alarm IRQ\n"); goto no_irq; } ret = devm_request_threaded_irq(&pdev->dev, info->irq, NULL, max8998_rtc_alarm_irq, 0, "rtc-alarm0", info); if (ret < 0) dev_err(&pdev->dev, "Failed to request alarm IRQ: %d: %d\n", info->irq, ret); no_irq: dev_info(&pdev->dev, "RTC CHIP NAME: %s\n", pdev->id_entry->name); if (pdata && pdata->rtc_delay) { info->lp3974_bug_workaround = true; dev_warn(&pdev->dev, "LP3974 with RTC REGERR option." " RTC updates will be extremely slow.\n"); } return 0; }
static int au1xtoy_rtc_probe(struct platform_device *pdev) { struct rtc_device *rtcdev; unsigned long t; int ret; t = au_readl(SYS_COUNTER_CNTRL); if (!(t & CNTR_OK)) { dev_err(&pdev->dev, "counters not working; aborting.\n"); ret = -ENODEV; goto out_err; } ret = -ETIMEDOUT; /* set counter0 tickrate to 1Hz if necessary */ if (au_readl(SYS_TOYTRIM) != 32767) { /* wait until hardware gives access to TRIM register */ t = 0x00100000; while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_T0S) && --t) msleep(1); if (!t) { /* timed out waiting for register access; assume * counters are unusable. */ dev_err(&pdev->dev, "timeout waiting for access\n"); goto out_err; } /* set 1Hz TOY tick rate */ au_writel(32767, SYS_TOYTRIM); au_sync(); } /* wait until the hardware allows writes to the counter reg */ while (au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_C0S) msleep(1); rtcdev = devm_rtc_device_register(&pdev->dev, "rtc-au1xxx", &au1xtoy_rtc_ops, THIS_MODULE); if (IS_ERR(rtcdev)) { ret = PTR_ERR(rtcdev); goto out_err; } platform_set_drvdata(pdev, rtcdev); return 0; out_err: return ret; }