> When I reported : > > > * new_device (built-in, and external module) > > echo ds1307 0x68 > /sys/bus/i2c/devices/i2c-2/new_device > > cat /sys/class/rtc/rtc0/date > > > > - Both of those worked fine. > > That was *without* Javier's patch, but hopefully obviously *with* Lee's > patchset. > > Do you need this testing *with* Javiers patch as well? Without Javiers patch. But with a modified rtc driver which will only use proper compatibles, no i2c_device_ids, and probe_new. And this one should be able to instantiate via userspace with the driver builtin. We have documented ways of instantiating. All I ask for is to make sure the old style and new style work with them. Check the attached sketch for an example (only compile-tested and conversion to probe_new is missing). Can you instantiate the "maxim,ds1307" (with the additional printout) and "dallas,ds1307" via userspace? diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c index 821d9c089cdb48..10a4e5bc923e07 100644 --- a/drivers/rtc/rtc-ds1307.c +++ b/drivers/rtc/rtc-ds1307.c @@ -31,6 +31,7 @@ */ enum ds_type { ds_1307, + maxim_1307, ds_1337, ds_1338, ds_1339, @@ -144,6 +145,10 @@ static struct chip_desc chips[last_ds_type] = { .nvram_offset = 8, .nvram_size = 56, }, + [maxim_1307] = { + .nvram_offset = 8, + .nvram_size = 56, + }, [ds_1337] = { .alarm = 1, }, @@ -173,23 +178,6 @@ static struct chip_desc chips[last_ds_type] = { }, }; -static const struct i2c_device_id ds1307_id[] = { - { "ds1307", ds_1307 }, - { "ds1337", ds_1337 }, - { "ds1338", ds_1338 }, - { "ds1339", ds_1339 }, - { "ds1388", ds_1388 }, - { "ds1340", ds_1340 }, - { "ds3231", ds_3231 }, - { "m41t00", m41t00 }, - { "mcp7940x", mcp794xx }, - { "mcp7941x", mcp794xx }, - { "pt7c4338", ds_1307 }, - { "rx8025", rx_8025 }, - { } -}; -MODULE_DEVICE_TABLE(i2c, ds1307_id); - /*----------------------------------------------------------------------*/ #define BLOCK_DATA_MAX_TRIES 10 @@ -1435,6 +1423,9 @@ read_rtc: */ tmp = ds1307->regs[DS1307_REG_SECS]; switch (ds1307->type) { + case maxim_1307: + dev_info(&client->dev, "I'm a Maxim\n"); + /* fallthrough */ case ds_1307: case m41t00: /* clock halted? turn it on, so clock can tick. */ @@ -1610,13 +1601,22 @@ static int ds1307_remove(struct i2c_client *client) return 0; } +#ifdef CONFIG_OF +static const struct of_device_id ds1307_dt_ids[] = { + { .compatible = "dallas,ds1307", .data = (void *)ds_1307 }, + { .compatible = "maxim,ds1307", .data = (void *)maxim_1307 }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, ds1302_dt_ids); +#endif + static struct i2c_driver ds1307_driver = { .driver = { .name = "rtc-ds1307", + .of_match_table = of_match_ptr(ds1307_dt_ids), }, .probe = ds1307_probe, .remove = ds1307_remove, - .id_table = ds1307_id, }; module_i2c_driver(ds1307_driver);
Attachment:
signature.asc
Description: PGP signature