@@ -120,17 +120,19 @@ struct at24_chip_data {
120120 u32 byte_len ;
121121 u8 flags ;
122122 u8 bank_addr_shift ;
123+ u8 adjoff ;
123124 void (* read_post )(unsigned int off , char * buf , size_t count );
124125};
125126
126- #define AT24_CHIP_DATA (_name , _len , _flags ) \
127+ #define AT24_CHIP_DATA (_name , _len , _flags , _adjoff ) \
127128 static const struct at24_chip_data _name = { \
128- .byte_len = _len, .flags = _flags, \
129+ .byte_len = _len, .flags = _flags, .adjoff = _adjoff, \
129130 }
130131
131- #define AT24_CHIP_DATA_CB (_name , _len , _flags , _read_post ) \
132+ #define AT24_CHIP_DATA_CB (_name , _len , _flags , _adjoff , _read_post ) \
132133 static const struct at24_chip_data _name = { \
133134 .byte_len = _len, .flags = _flags, \
135+ .adjoff = _adjoff, \
134136 .read_post = _read_post, \
135137 }
136138
@@ -161,49 +163,53 @@ static void at24_read_post_vaio(unsigned int off, char *buf, size_t count)
161163}
162164
163165/* needs 8 addresses as A0-A2 are ignored */
164- AT24_CHIP_DATA (at24_data_24c00 , 128 / 8 , AT24_FLAG_TAKE8ADDR );
166+ AT24_CHIP_DATA (at24_data_24c00 , 128 / 8 , AT24_FLAG_TAKE8ADDR , 0 );
165167/* old variants can't be handled with this generic entry! */
166- AT24_CHIP_DATA (at24_data_24c01 , 1024 / 8 , 0 );
168+ AT24_CHIP_DATA (at24_data_24c01 , 1024 / 8 , 0 , 0 );
167169AT24_CHIP_DATA (at24_data_24cs01 , 16 ,
168- AT24_FLAG_SERIAL | AT24_FLAG_READONLY );
169- AT24_CHIP_DATA (at24_data_24c02 , 2048 / 8 , 0 );
170+ AT24_FLAG_SERIAL | AT24_FLAG_READONLY , 0 );
171+ AT24_CHIP_DATA (at24_data_24c02 , 2048 / 8 , 0 , 0 );
170172AT24_CHIP_DATA (at24_data_24cs02 , 16 ,
171- AT24_FLAG_SERIAL | AT24_FLAG_READONLY );
173+ AT24_FLAG_SERIAL | AT24_FLAG_READONLY , 0 );
172174AT24_CHIP_DATA (at24_data_24mac402 , 48 / 8 ,
173- AT24_FLAG_MAC | AT24_FLAG_READONLY );
175+ AT24_FLAG_MAC | AT24_FLAG_READONLY , 1 );
174176AT24_CHIP_DATA (at24_data_24mac602 , 64 / 8 ,
175- AT24_FLAG_MAC | AT24_FLAG_READONLY );
177+ AT24_FLAG_MAC | AT24_FLAG_READONLY , 1 );
178+ AT24_CHIP_DATA (at24_data_24mac02e4 , 48 / 8 ,
179+ AT24_FLAG_MAC | AT24_FLAG_READONLY , 0 );
180+ AT24_CHIP_DATA (at24_data_24mac02e6 , 64 / 8 ,
181+ AT24_FLAG_MAC | AT24_FLAG_READONLY , 0 );
176182/* spd is a 24c02 in memory DIMMs */
177183AT24_CHIP_DATA (at24_data_spd , 2048 / 8 ,
178- AT24_FLAG_READONLY | AT24_FLAG_IRUGO );
184+ AT24_FLAG_READONLY | AT24_FLAG_IRUGO , 0 );
179185/* 24c02_vaio is a 24c02 on some Sony laptops */
180186AT24_CHIP_DATA_CB (at24_data_24c02_vaio , 2048 / 8 ,
181- AT24_FLAG_READONLY | AT24_FLAG_IRUGO ,
187+ AT24_FLAG_READONLY | AT24_FLAG_IRUGO , 0 ,
182188 at24_read_post_vaio );
183- AT24_CHIP_DATA (at24_data_24c04 , 4096 / 8 , 0 );
189+ AT24_CHIP_DATA (at24_data_24c04 , 4096 / 8 , 0 , 0 );
184190AT24_CHIP_DATA (at24_data_24cs04 , 16 ,
185- AT24_FLAG_SERIAL | AT24_FLAG_READONLY );
191+ AT24_FLAG_SERIAL | AT24_FLAG_READONLY , 0 );
186192/* 24rf08 quirk is handled at i2c-core */
187- AT24_CHIP_DATA (at24_data_24c08 , 8192 / 8 , 0 );
193+ AT24_CHIP_DATA (at24_data_24c08 , 8192 / 8 , 0 , 0 );
188194AT24_CHIP_DATA (at24_data_24cs08 , 16 ,
189- AT24_FLAG_SERIAL | AT24_FLAG_READONLY );
190- AT24_CHIP_DATA (at24_data_24c16 , 16384 / 8 , 0 );
195+ AT24_FLAG_SERIAL | AT24_FLAG_READONLY , 0 );
196+ AT24_CHIP_DATA (at24_data_24c16 , 16384 / 8 , 0 , 0 );
191197AT24_CHIP_DATA (at24_data_24cs16 , 16 ,
192- AT24_FLAG_SERIAL | AT24_FLAG_READONLY );
193- AT24_CHIP_DATA (at24_data_24c32 , 32768 / 8 , AT24_FLAG_ADDR16 );
198+ AT24_FLAG_SERIAL | AT24_FLAG_READONLY , 0 );
199+ AT24_CHIP_DATA (at24_data_24c32 , 32768 / 8 , AT24_FLAG_ADDR16 , 0 );
194200AT24_CHIP_DATA (at24_data_24cs32 , 16 ,
195- AT24_FLAG_ADDR16 | AT24_FLAG_SERIAL | AT24_FLAG_READONLY );
196- AT24_CHIP_DATA (at24_data_24c64 , 65536 / 8 , AT24_FLAG_ADDR16 );
201+ AT24_FLAG_ADDR16 | AT24_FLAG_SERIAL | AT24_FLAG_READONLY , 0 );
202+ AT24_CHIP_DATA (at24_data_24c64 , 65536 / 8 , AT24_FLAG_ADDR16 , 0 );
197203AT24_CHIP_DATA (at24_data_24cs64 , 16 ,
198- AT24_FLAG_ADDR16 | AT24_FLAG_SERIAL | AT24_FLAG_READONLY );
199- AT24_CHIP_DATA (at24_data_24c128 , 131072 / 8 , AT24_FLAG_ADDR16 );
200- AT24_CHIP_DATA (at24_data_24c256 , 262144 / 8 , AT24_FLAG_ADDR16 );
201- AT24_CHIP_DATA (at24_data_24c512 , 524288 / 8 , AT24_FLAG_ADDR16 );
202- AT24_CHIP_DATA (at24_data_24c1024 , 1048576 / 8 , AT24_FLAG_ADDR16 );
204+ AT24_FLAG_ADDR16 | AT24_FLAG_SERIAL | AT24_FLAG_READONLY , 0 );
205+ AT24_CHIP_DATA (at24_data_24c128 , 131072 / 8 , AT24_FLAG_ADDR16 , 0 );
206+ AT24_CHIP_DATA (at24_data_24c256 , 262144 / 8 , AT24_FLAG_ADDR16 , 0 );
207+ AT24_CHIP_DATA (at24_data_24c512 , 524288 / 8 , AT24_FLAG_ADDR16 , 0 );
208+ AT24_CHIP_DATA (at24_data_24c1024 , 1048576 / 8 , AT24_FLAG_ADDR16 , 0 );
209+ AT24_CHIP_DATA (at24_data_24c2048 , 2097152 / 8 , AT24_FLAG_ADDR16 , 0 );
203210AT24_CHIP_DATA_BS (at24_data_24c1025 , 1048576 / 8 , AT24_FLAG_ADDR16 , 2 );
204- AT24_CHIP_DATA (at24_data_24c2048 , 2097152 / 8 , AT24_FLAG_ADDR16 );
205211/* identical to 24c08 ? */
206- AT24_CHIP_DATA (at24_data_INT3499 , 8192 / 8 , 0 );
212+ AT24_CHIP_DATA (at24_data_INT3499 , 8192 / 8 , 0 , 0 );
207213
208214static const struct i2c_device_id at24_ids [] = {
209215 { "24c00" , (kernel_ulong_t )& at24_data_24c00 },
@@ -212,7 +218,9 @@ static const struct i2c_device_id at24_ids[] = {
212218 { "24c02" , (kernel_ulong_t )& at24_data_24c02 },
213219 { "24cs02" , (kernel_ulong_t )& at24_data_24cs02 },
214220 { "24mac402" , (kernel_ulong_t )& at24_data_24mac402 },
221+ { "24mac02e4" , (kernel_ulong_t )& at24_data_24mac02e4 },
215222 { "24mac602" , (kernel_ulong_t )& at24_data_24mac602 },
223+ { "24mac02e6" , (kernel_ulong_t )& at24_data_24mac02e6 },
216224 { "spd" , (kernel_ulong_t )& at24_data_spd },
217225 { "24c02-vaio" , (kernel_ulong_t )& at24_data_24c02_vaio },
218226 { "24c04" , (kernel_ulong_t )& at24_data_24c04 },
@@ -243,7 +251,9 @@ static const struct of_device_id at24_of_match[] = {
243251 { .compatible = "atmel,24c02" , .data = & at24_data_24c02 },
244252 { .compatible = "atmel,24cs02" , .data = & at24_data_24cs02 },
245253 { .compatible = "atmel,24mac402" , .data = & at24_data_24mac402 },
254+ { .compatible = "atmel,24mac02e4" , .data = & at24_data_24mac02e4 },
246255 { .compatible = "atmel,24mac602" , .data = & at24_data_24mac602 },
256+ { .compatible = "atmel,24mac02e6" , .data = & at24_data_24mac02e6 },
247257 { .compatible = "atmel,spd" , .data = & at24_data_spd },
248258 { .compatible = "atmel,24c04" , .data = & at24_data_24c04 },
249259 { .compatible = "atmel,24cs04" , .data = & at24_data_24cs04 },
@@ -688,7 +698,8 @@ static int at24_probe(struct i2c_client *client)
688698 at24 -> read_post = cdata -> read_post ;
689699 at24 -> bank_addr_shift = cdata -> bank_addr_shift ;
690700 at24 -> num_addresses = num_addresses ;
691- at24 -> offset_adj = at24_get_offset_adj (flags , byte_len );
701+ at24 -> offset_adj = cdata -> adjoff ?
702+ at24_get_offset_adj (flags , byte_len ) : 0 ;
692703 at24 -> client_regmaps [0 ] = regmap ;
693704
694705 at24 -> vcc_reg = devm_regulator_get (dev , "vcc" );
0 commit comments