Skip to content

Commit 08f9c01

Browse files
committed
Merge branch 'linux-6.6-trunk/at91/eeprom' into linux-6.6-mchp
2 parents c3ffe0f + feb209d commit 08f9c01

1 file changed

Lines changed: 40 additions & 29 deletions

File tree

drivers/misc/eeprom/at24.c

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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);
167169
AT24_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);
170172
AT24_CHIP_DATA(at24_data_24cs02, 16,
171-
AT24_FLAG_SERIAL | AT24_FLAG_READONLY);
173+
AT24_FLAG_SERIAL | AT24_FLAG_READONLY, 0);
172174
AT24_CHIP_DATA(at24_data_24mac402, 48 / 8,
173-
AT24_FLAG_MAC | AT24_FLAG_READONLY);
175+
AT24_FLAG_MAC | AT24_FLAG_READONLY, 1);
174176
AT24_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 */
177183
AT24_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 */
180186
AT24_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);
184190
AT24_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);
188194
AT24_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);
191197
AT24_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);
194200
AT24_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);
197203
AT24_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);
203210
AT24_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

208214
static 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

Comments
 (0)