@@ -92,7 +92,7 @@ struct at24_data {
92
92
* them for us.
93
93
*/
94
94
u8 bank_addr_shift ;
95
- struct regmap * client_regmaps [];
95
+ struct regmap * client_regmaps [] __counted_by ( num_addresses ) ;
96
96
};
97
97
98
98
/*
@@ -191,9 +191,13 @@ AT24_CHIP_DATA(at24_data_24c16, 16384 / 8, 0);
191
191
AT24_CHIP_DATA (at24_data_24cs16 , 16 ,
192
192
AT24_FLAG_SERIAL | AT24_FLAG_READONLY );
193
193
AT24_CHIP_DATA (at24_data_24c32 , 32768 / 8 , AT24_FLAG_ADDR16 );
194
+ /* M24C32-D Additional Write lockable page (M24C32-D order codes) */
195
+ AT24_CHIP_DATA (at24_data_24c32d_wlp , 32 , AT24_FLAG_ADDR16 );
194
196
AT24_CHIP_DATA (at24_data_24cs32 , 16 ,
195
197
AT24_FLAG_ADDR16 | AT24_FLAG_SERIAL | AT24_FLAG_READONLY );
196
198
AT24_CHIP_DATA (at24_data_24c64 , 65536 / 8 , AT24_FLAG_ADDR16 );
199
+ /* M24C64-D Additional Write lockable page (M24C64-D order codes) */
200
+ AT24_CHIP_DATA (at24_data_24c64d_wlp , 32 , AT24_FLAG_ADDR16 );
197
201
AT24_CHIP_DATA (at24_data_24cs64 , 16 ,
198
202
AT24_FLAG_ADDR16 | AT24_FLAG_SERIAL | AT24_FLAG_READONLY );
199
203
AT24_CHIP_DATA (at24_data_24c128 , 131072 / 8 , AT24_FLAG_ADDR16 );
@@ -222,8 +226,10 @@ static const struct i2c_device_id at24_ids[] = {
222
226
{ "24c16" , (kernel_ulong_t )& at24_data_24c16 },
223
227
{ "24cs16" , (kernel_ulong_t )& at24_data_24cs16 },
224
228
{ "24c32" , (kernel_ulong_t )& at24_data_24c32 },
229
+ { "24c32d-wl" , (kernel_ulong_t )& at24_data_24c32d_wlp },
225
230
{ "24cs32" , (kernel_ulong_t )& at24_data_24cs32 },
226
231
{ "24c64" , (kernel_ulong_t )& at24_data_24c64 },
232
+ { "24c64-wl" , (kernel_ulong_t )& at24_data_24c64d_wlp },
227
233
{ "24cs64" , (kernel_ulong_t )& at24_data_24cs64 },
228
234
{ "24c128" , (kernel_ulong_t )& at24_data_24c128 },
229
235
{ "24c256" , (kernel_ulong_t )& at24_data_24c256 },
@@ -252,8 +258,10 @@ static const struct of_device_id at24_of_match[] = {
252
258
{ .compatible = "atmel,24c16" , .data = & at24_data_24c16 },
253
259
{ .compatible = "atmel,24cs16" , .data = & at24_data_24cs16 },
254
260
{ .compatible = "atmel,24c32" , .data = & at24_data_24c32 },
261
+ { .compatible = "atmel,24c32d-wl" , .data = & at24_data_24c32d_wlp },
255
262
{ .compatible = "atmel,24cs32" , .data = & at24_data_24cs32 },
256
263
{ .compatible = "atmel,24c64" , .data = & at24_data_24c64 },
264
+ { .compatible = "atmel,24c64d-wl" , .data = & at24_data_24c64d_wlp },
257
265
{ .compatible = "atmel,24cs64" , .data = & at24_data_24cs64 },
258
266
{ .compatible = "atmel,24c128" , .data = & at24_data_24c128 },
259
267
{ .compatible = "atmel,24c256" , .data = & at24_data_24c256 },
@@ -509,32 +517,6 @@ static int at24_write(void *priv, unsigned int off, void *val, size_t count)
509
517
return 0 ;
510
518
}
511
519
512
- static const struct at24_chip_data * at24_get_chip_data (struct device * dev )
513
- {
514
- struct device_node * of_node = dev -> of_node ;
515
- const struct at24_chip_data * cdata ;
516
- const struct i2c_device_id * id ;
517
-
518
- id = i2c_match_id (at24_ids , to_i2c_client (dev ));
519
-
520
- /*
521
- * The I2C core allows OF nodes compatibles to match against the
522
- * I2C device ID table as a fallback, so check not only if an OF
523
- * node is present but also if it matches an OF device ID entry.
524
- */
525
- if (of_node && of_match_device (at24_of_match , dev ))
526
- cdata = of_device_get_match_data (dev );
527
- else if (id )
528
- cdata = (void * )id -> driver_data ;
529
- else
530
- cdata = acpi_device_get_match_data (dev );
531
-
532
- if (!cdata )
533
- return ERR_PTR (- ENODEV );
534
-
535
- return cdata ;
536
- }
537
-
538
520
static int at24_make_dummy_client (struct at24_data * at24 , unsigned int index ,
539
521
struct i2c_client * base_client ,
540
522
struct regmap_config * regmap_config )
@@ -601,9 +583,9 @@ static int at24_probe(struct i2c_client *client)
601
583
i2c_fn_block = i2c_check_functionality (client -> adapter ,
602
584
I2C_FUNC_SMBUS_WRITE_I2C_BLOCK );
603
585
604
- cdata = at24_get_chip_data ( dev );
605
- if (IS_ERR ( cdata ) )
606
- return PTR_ERR ( cdata ) ;
586
+ cdata = i2c_get_match_data ( client );
587
+ if (! cdata )
588
+ return - ENODEV ;
607
589
608
590
err = device_property_read_u32 (dev , "pagesize" , & page_size );
609
591
if (err )
0 commit comments