@@ -92,7 +92,7 @@ struct at24_data {
9292 * them for us.
9393 */
9494 u8 bank_addr_shift ;
95- struct regmap * client_regmaps [];
95+ struct regmap * client_regmaps [] __counted_by ( num_addresses ) ;
9696};
9797
9898/*
@@ -191,9 +191,13 @@ AT24_CHIP_DATA(at24_data_24c16, 16384 / 8, 0);
191191AT24_CHIP_DATA (at24_data_24cs16 , 16 ,
192192 AT24_FLAG_SERIAL | AT24_FLAG_READONLY );
193193AT24_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 );
194196AT24_CHIP_DATA (at24_data_24cs32 , 16 ,
195197 AT24_FLAG_ADDR16 | AT24_FLAG_SERIAL | AT24_FLAG_READONLY );
196198AT24_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 );
197201AT24_CHIP_DATA (at24_data_24cs64 , 16 ,
198202 AT24_FLAG_ADDR16 | AT24_FLAG_SERIAL | AT24_FLAG_READONLY );
199203AT24_CHIP_DATA (at24_data_24c128 , 131072 / 8 , AT24_FLAG_ADDR16 );
@@ -222,8 +226,10 @@ static const struct i2c_device_id at24_ids[] = {
222226 { "24c16" , (kernel_ulong_t )& at24_data_24c16 },
223227 { "24cs16" , (kernel_ulong_t )& at24_data_24cs16 },
224228 { "24c32" , (kernel_ulong_t )& at24_data_24c32 },
229+ { "24c32d-wl" , (kernel_ulong_t )& at24_data_24c32d_wlp },
225230 { "24cs32" , (kernel_ulong_t )& at24_data_24cs32 },
226231 { "24c64" , (kernel_ulong_t )& at24_data_24c64 },
232+ { "24c64-wl" , (kernel_ulong_t )& at24_data_24c64d_wlp },
227233 { "24cs64" , (kernel_ulong_t )& at24_data_24cs64 },
228234 { "24c128" , (kernel_ulong_t )& at24_data_24c128 },
229235 { "24c256" , (kernel_ulong_t )& at24_data_24c256 },
@@ -252,8 +258,10 @@ static const struct of_device_id at24_of_match[] = {
252258 { .compatible = "atmel,24c16" , .data = & at24_data_24c16 },
253259 { .compatible = "atmel,24cs16" , .data = & at24_data_24cs16 },
254260 { .compatible = "atmel,24c32" , .data = & at24_data_24c32 },
261+ { .compatible = "atmel,24c32d-wl" , .data = & at24_data_24c32d_wlp },
255262 { .compatible = "atmel,24cs32" , .data = & at24_data_24cs32 },
256263 { .compatible = "atmel,24c64" , .data = & at24_data_24c64 },
264+ { .compatible = "atmel,24c64d-wl" , .data = & at24_data_24c64d_wlp },
257265 { .compatible = "atmel,24cs64" , .data = & at24_data_24cs64 },
258266 { .compatible = "atmel,24c128" , .data = & at24_data_24c128 },
259267 { .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)
509517 return 0 ;
510518}
511519
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-
538520static int at24_make_dummy_client (struct at24_data * at24 , unsigned int index ,
539521 struct i2c_client * base_client ,
540522 struct regmap_config * regmap_config )
@@ -601,9 +583,9 @@ static int at24_probe(struct i2c_client *client)
601583 i2c_fn_block = i2c_check_functionality (client -> adapter ,
602584 I2C_FUNC_SMBUS_WRITE_I2C_BLOCK );
603585
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 ;
607589
608590 err = device_property_read_u32 (dev , "pagesize" , & page_size );
609591 if (err )
0 commit comments