static int ds3232_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct regmap *regmap; static const struct regmap_config config = { .reg_bits = 8, .val_bits = 8, .max_register = 0x13, }; regmap = devm_regmap_init_i2c(client, &config); if (IS_ERR(regmap)) { dev_err(&client->dev, "%s: regmap allocation failed: %ld\n", __func__, PTR_ERR(regmap)); return PTR_ERR(regmap); } return ds3232_probe(&client->dev, regmap, client->irq, client->name); } static const struct i2c_device_id ds3232_id[] = { { "ds3232", 0 }, { } }; MODULE_DEVICE_TABLE(i2c, ds3232_id); static const struct of_device_id ds3232_of_match[] = { { .compatible = "dallas,ds3232" }, { } };
static int ds3232_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct regmap *regmap; static const struct regmap_config config = { .reg_bits = 8, .val_bits = 8, }; regmap = devm_regmap_init_i2c(client, &config); if (IS_ERR(regmap)) { dev_err(&client->dev, "%s: regmap allocation failed: %ld\n", __func__, PTR_ERR(regmap)); return PTR_ERR(regmap); } return ds3232_probe(&client->dev, regmap, client->irq, client->name); } static const struct i2c_device_id ds3232_id[] = { { "ds3232", 0 }, { } }; MODULE_DEVICE_TABLE(i2c, ds3232_id); static struct i2c_driver ds3232_driver = { .driver = { .name = "rtc-ds3232", .pm = &ds3232_pm_ops, }, .probe = ds3232_i2c_probe, .id_table = ds3232_id, };
static int ds3234_probe(struct spi_device *spi) { int res; unsigned int tmp; static const struct regmap_config config = { .reg_bits = 8, .val_bits = 8, .max_register = 0x13, .write_flag_mask = 0x80, }; struct regmap *regmap; regmap = devm_regmap_init_spi(spi, &config); if (IS_ERR(regmap)) { dev_err(&spi->dev, "%s: regmap allocation failed: %ld\n", __func__, PTR_ERR(regmap)); return PTR_ERR(regmap); } spi->mode = SPI_MODE_3; spi->bits_per_word = 8; spi_setup(spi); res = regmap_read(regmap, DS3232_REG_SECONDS, &tmp); if (res) return res; /* Control settings * * CONTROL_REG * BIT 7 6 5 4 3 2 1 0 * EOSC BBSQW CONV RS2 RS1 INTCN A2IE A1IE * * 0 0 0 1 1 1 0 0 * * CONTROL_STAT_REG * BIT 7 6 5 4 3 2 1 0 * OSF BB32kHz CRATE1 CRATE0 EN32kHz BSY A2F A1F * * 1 0 0 0 1 0 0 0 */ res = regmap_read(regmap, DS3232_REG_CR, &tmp); if (res) return res; res = regmap_write(regmap, DS3232_REG_CR, tmp & 0x1c); if (res) return res; res = regmap_read(regmap, DS3232_REG_SR, &tmp); if (res) return res; res = regmap_write(regmap, DS3232_REG_SR, tmp & 0x88); if (res) return res; /* Print our settings */ res = regmap_read(regmap, DS3232_REG_CR, &tmp); if (res) return res; dev_info(&spi->dev, "Control Reg: 0x%02x\n", tmp); res = regmap_read(regmap, DS3232_REG_SR, &tmp); if (res) return res; dev_info(&spi->dev, "Ctrl/Stat Reg: 0x%02x\n", tmp); return ds3232_probe(&spi->dev, regmap, spi->irq, "ds3234"); } static struct spi_driver ds3234_driver = { .driver = { .name = "ds3234", }, .probe = ds3234_probe, };