Lines Matching +full:client +full:- +full:id

1 // SPDX-License-Identifier: GPL-2.0
22 #include <linux/rk-camera-module.h>
25 #include <media/v4l2-ctrls.h>
26 #include <media/v4l2-device.h>
40 static int read_reg_otp(struct i2c_client *client, u16 reg, in read_reg_otp() argument
50 return -EINVAL; in read_reg_otp()
54 msgs[0].addr = client->addr; in read_reg_otp()
60 msgs[1].addr = client->addr; in read_reg_otp()
63 msgs[1].buf = &data_be_p[4 - len]; in read_reg_otp()
65 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); in read_reg_otp()
67 return -EIO; in read_reg_otp()
75 static int read_reg_otp_buf(struct i2c_client *client, u16 reg, in read_reg_otp_buf() argument
83 msgs[0].addr = client->addr; in read_reg_otp_buf()
89 msgs[1].addr = client->addr; in read_reg_otp_buf()
94 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); in read_reg_otp_buf()
96 return -EIO; in read_reg_otp_buf()
101 static u8 get_vendor_flag(struct i2c_client *client) in get_vendor_flag() argument
109 read_reg_otp(client, INFO_FLAG_REG + i, 1, &temp); in get_vendor_flag()
122 struct i2c_client *client = eeprom_dev->client; in otp_read_data() local
125 struct device *dev = &eeprom_dev->client->dev; in otp_read_data()
131 return -ENOMEM; in otp_read_data()
133 ret = read_reg_otp(client, INFO_FLAG_REG, in otp_read_data()
134 1, &otp_ptr->basic_data.flag); in otp_read_data()
135 if (otp_ptr->basic_data.flag == 0x01) { in otp_read_data()
136 ret |= read_reg_otp(client, INFO_ID_REG, in otp_read_data()
137 1, &otp_ptr->basic_data.id.supplier_id); in otp_read_data()
138 ret |= read_reg_otp(client, INFO_ID_REG + 1, in otp_read_data()
139 1, &otp_ptr->basic_data.id.year); in otp_read_data()
140 ret |= read_reg_otp(client, INFO_ID_REG + 2, in otp_read_data()
141 1, &otp_ptr->basic_data.id.month); in otp_read_data()
142 ret |= read_reg_otp(client, INFO_ID_REG + 3, in otp_read_data()
143 1, &otp_ptr->basic_data.id.day); in otp_read_data()
144 ret |= read_reg_otp(client, INFO_ID_REG + 4, in otp_read_data()
145 1, &otp_ptr->basic_data.id.sensor_id); in otp_read_data()
146 ret |= read_reg_otp(client, INFO_ID_REG + 5, in otp_read_data()
147 1, &otp_ptr->basic_data.id.lens_id); in otp_read_data()
148 ret |= read_reg_otp(client, INFO_ID_REG + 6, in otp_read_data()
149 1, &otp_ptr->basic_data.id.vcm_id); in otp_read_data()
150 ret |= read_reg_otp(client, INFO_ID_REG + 7, in otp_read_data()
151 1, &otp_ptr->basic_data.id.driver_ic_id); in otp_read_data()
152 ret |= read_reg_otp(client, INFO_ID_REG + 8, in otp_read_data()
153 1, &otp_ptr->basic_data.id.color_temperature_id); in otp_read_data()
155 ret |= read_reg_otp(client, SMARTISAN_PN_REG + i, in otp_read_data()
157 otp_ptr->basic_data.smartisan_pn[i] = temp; in otp_read_data()
160 ret |= read_reg_otp(client, MOUDLE_ID_REG + i, in otp_read_data()
162 otp_ptr->basic_data.modul_id[i] = temp; in otp_read_data()
164 ret |= read_reg_otp(client, MIRROR_FLIP_REG, in otp_read_data()
165 1, &otp_ptr->basic_data.mirror_flip); in otp_read_data()
166 ret |= read_reg_otp(client, FULL_SIZE_WIGHT_REG, in otp_read_data()
168 otp_ptr->basic_data.size.width = temp; in otp_read_data()
169 ret |= read_reg_otp(client, FULL_SIZE_HEIGHT_REG, in otp_read_data()
171 otp_ptr->basic_data.size.height = temp; in otp_read_data()
172 ret |= read_reg_otp(client, INFO_CHECKSUM_REG, in otp_read_data()
173 1, &otp_ptr->basic_data.checksum); in otp_read_data()
176 otp_ptr->basic_data.id.supplier_id, in otp_read_data()
177 otp_ptr->basic_data.id.lens_id, in otp_read_data()
178 otp_ptr->basic_data.id.year, in otp_read_data()
179 otp_ptr->basic_data.id.month, in otp_read_data()
180 otp_ptr->basic_data.id.day); in otp_read_data()
186 ret = read_reg_otp(client, AWB_FLAG_REG, in otp_read_data()
187 1, &otp_ptr->awb_data.flag); in otp_read_data()
188 if (otp_ptr->awb_data.flag == 0x01) { in otp_read_data()
189 ret |= read_reg_otp(client, AWB_VERSION_REG, in otp_read_data()
190 1, &otp_ptr->awb_data.version); in otp_read_data()
191 ret |= read_reg_otp(client, CUR_R_REG, in otp_read_data()
192 2, &otp_ptr->awb_data.r_ratio); in otp_read_data()
193 ret |= read_reg_otp(client, CUR_B_REG, in otp_read_data()
194 2, &otp_ptr->awb_data.b_ratio); in otp_read_data()
195 ret |= read_reg_otp(client, CUR_G_REG, in otp_read_data()
196 2, &otp_ptr->awb_data.g_ratio); in otp_read_data()
197 ret |= read_reg_otp(client, GOLDEN_R_REG, in otp_read_data()
198 2, &otp_ptr->awb_data.r_golden); in otp_read_data()
199 ret |= read_reg_otp(client, GOLDEN_B_REG, in otp_read_data()
200 2, &otp_ptr->awb_data.b_golden); in otp_read_data()
201 ret |= read_reg_otp(client, GOLDEN_G_REG, in otp_read_data()
202 2, &otp_ptr->awb_data.g_golden); in otp_read_data()
203 ret |= read_reg_otp(client, AWB_CHECKSUM_REG, in otp_read_data()
204 1, &otp_ptr->awb_data.checksum); in otp_read_data()
207 otp_ptr->awb_data.version); in otp_read_data()
213 ret = read_reg_otp(client, LSC_FLAG_REG, in otp_read_data()
214 1, &otp_ptr->lsc_data.flag); in otp_read_data()
215 if (otp_ptr->lsc_data.flag == 0x01) { in otp_read_data()
216 ret |= read_reg_otp(client, LSC_VERSION_REG, in otp_read_data()
217 1, &otp_ptr->lsc_data.version); in otp_read_data()
218 ret |= read_reg_otp(client, LSC_TABLE_SIZE_REG, in otp_read_data()
220 otp_ptr->lsc_data.table_size = temp; in otp_read_data()
222 ret |= read_reg_otp(client, LSC_DATA_START_REG + i, in otp_read_data()
224 otp_ptr->lsc_data.data[i] = temp; in otp_read_data()
226 ret |= read_reg_otp(client, LSC_CHECKSUM_REG, in otp_read_data()
227 1, &otp_ptr->lsc_data.checksum); in otp_read_data()
229 otp_ptr->lsc_data.version, in otp_read_data()
230 otp_ptr->lsc_data.table_size, in otp_read_data()
231 otp_ptr->lsc_data.checksum); in otp_read_data()
237 ret = read_reg_otp(client, LSC_FLAG_REG, in otp_read_data()
238 1, &otp_ptr->sfr_otp_data.flag); in otp_read_data()
239 if (otp_ptr->sfr_otp_data.flag == 0x01) { in otp_read_data()
240 ret |= read_reg_otp(client, SFR_EQUIQ_NUM_REG, in otp_read_data()
241 1, &otp_ptr->sfr_otp_data.equip_num); in otp_read_data()
242 ret |= read_reg_otp(client, SFR_C_HOR_REG, in otp_read_data()
243 2, &otp_ptr->sfr_otp_data.center_horizontal); in otp_read_data()
244 ret |= read_reg_otp(client, SFR_C_VER_REG, in otp_read_data()
245 2, &otp_ptr->sfr_otp_data.center_vertical); in otp_read_data()
247 ret |= read_reg_otp(client, SFR_TOP_L_HOR_REG + 16 * i, in otp_read_data()
248 2, &otp_ptr->sfr_otp_data.data[i].top_l_horizontal); in otp_read_data()
249 ret |= read_reg_otp(client, SFR_TOP_L_VER_REG + 16 * i, in otp_read_data()
250 2, &otp_ptr->sfr_otp_data.data[i].top_l_vertical); in otp_read_data()
251 ret |= read_reg_otp(client, SFR_TOP_R_HOR_REG + 16 * i, in otp_read_data()
252 2, &otp_ptr->sfr_otp_data.data[i].top_r_horizontal); in otp_read_data()
253 ret |= read_reg_otp(client, SFR_TOP_R_VER_REG + 16 * i, in otp_read_data()
254 2, &otp_ptr->sfr_otp_data.data[i].top_r_vertical); in otp_read_data()
255 ret |= read_reg_otp(client, SFR_BOTTOM_L_HOR_REG + 16 * i, in otp_read_data()
256 2, &otp_ptr->sfr_otp_data.data[i].bottom_l_horizontal); in otp_read_data()
257 ret |= read_reg_otp(client, SFR_BOTTOM_L_VER_REG + 16 * i, in otp_read_data()
258 2, &otp_ptr->sfr_otp_data.data[i].bottom_l_vertical); in otp_read_data()
259 ret |= read_reg_otp(client, SFR_BOTTOM_R_HOR_REG + 16 * i, in otp_read_data()
260 2, &otp_ptr->sfr_otp_data.data[i].bottom_r_horizontal); in otp_read_data()
261 ret |= read_reg_otp(client, SFR_BOTTOM_R_VER_REG + 16 * i, in otp_read_data()
262 2, &otp_ptr->sfr_otp_data.data[i].bottom_r_vertical); in otp_read_data()
265 ret |= read_reg_otp(client, SFR_CHECKSUM_REG, in otp_read_data()
266 1, &otp_ptr->sfr_otp_data.checksum); in otp_read_data()
271 ret = read_reg_otp(client, TOTAL_CHECKSUM_REG, in otp_read_data()
272 1, &otp_ptr->total_checksum); in otp_read_data()
276 if (otp_ptr->total_checksum) { in otp_read_data()
277 eeprom_dev->otp = otp_ptr; in otp_read_data()
280 eeprom_dev->otp = NULL; in otp_read_data()
282 dev_warn(&client->dev, "otp is NULL!\n"); in otp_read_data()
287 eeprom_dev->otp = NULL; in otp_read_data()
289 dev_warn(&client->dev, "@%s read otp err!\n", __func__); in otp_read_data()
290 return -EINVAL; in otp_read_data()
297 struct i2c_client *client = eeprom_dev->client; in rkotp_read_module_info() local
298 struct device *dev = &eeprom_dev->client->dev; in rkotp_read_module_info()
304 ret |= read_reg_otp(client, base_addr, in rkotp_read_module_info()
305 4, &otp_ptr->basic_data.module_size); in rkotp_read_module_info()
306 checksum += otp_ptr->basic_data.module_size; in rkotp_read_module_info()
308 ret |= read_reg_otp(client, base_addr, in rkotp_read_module_info()
309 2, &otp_ptr->basic_data.version); in rkotp_read_module_info()
310 checksum += otp_ptr->basic_data.version; in rkotp_read_module_info()
312 ret |= read_reg_otp(client, base_addr, in rkotp_read_module_info()
313 1, &otp_ptr->basic_data.id.supplier_id); in rkotp_read_module_info()
314 checksum += otp_ptr->basic_data.id.supplier_id; in rkotp_read_module_info()
316 ret |= read_reg_otp(client, base_addr, in rkotp_read_module_info()
317 1, &otp_ptr->basic_data.id.year); in rkotp_read_module_info()
318 checksum += otp_ptr->basic_data.id.year; in rkotp_read_module_info()
320 ret |= read_reg_otp(client, base_addr, in rkotp_read_module_info()
321 1, &otp_ptr->basic_data.id.month); in rkotp_read_module_info()
322 checksum += otp_ptr->basic_data.id.month; in rkotp_read_module_info()
324 ret |= read_reg_otp(client, base_addr, in rkotp_read_module_info()
325 1, &otp_ptr->basic_data.id.day); in rkotp_read_module_info()
326 checksum += otp_ptr->basic_data.id.day; in rkotp_read_module_info()
328 ret |= read_reg_otp(client, base_addr, in rkotp_read_module_info()
329 1, &otp_ptr->basic_data.id.sensor_id); in rkotp_read_module_info()
330 checksum += otp_ptr->basic_data.id.sensor_id; in rkotp_read_module_info()
332 ret |= read_reg_otp(client, base_addr, in rkotp_read_module_info()
333 1, &otp_ptr->basic_data.id.lens_id); in rkotp_read_module_info()
334 checksum += otp_ptr->basic_data.id.lens_id; in rkotp_read_module_info()
336 ret |= read_reg_otp(client, base_addr, in rkotp_read_module_info()
337 1, &otp_ptr->basic_data.id.vcm_id); in rkotp_read_module_info()
338 checksum += otp_ptr->basic_data.id.vcm_id; in rkotp_read_module_info()
340 ret |= read_reg_otp(client, base_addr, in rkotp_read_module_info()
341 1, &otp_ptr->basic_data.id.driver_ic_id); in rkotp_read_module_info()
342 checksum += otp_ptr->basic_data.id.driver_ic_id; in rkotp_read_module_info()
345 ret |= read_reg_otp(client, base_addr, in rkotp_read_module_info()
347 otp_ptr->basic_data.modul_id[i] = temp; in rkotp_read_module_info()
351 ret |= read_reg_otp(client, base_addr, in rkotp_read_module_info()
352 1, &otp_ptr->basic_data.mirror_flip); in rkotp_read_module_info()
353 checksum += otp_ptr->basic_data.mirror_flip; in rkotp_read_module_info()
355 ret |= read_reg_otp(client, base_addr, in rkotp_read_module_info()
358 otp_ptr->basic_data.size.width = temp; in rkotp_read_module_info()
360 ret |= read_reg_otp(client, base_addr, in rkotp_read_module_info()
363 otp_ptr->basic_data.size.height = temp; in rkotp_read_module_info()
366 ret |= read_reg_otp(client, base_addr, in rkotp_read_module_info()
371 ret |= read_reg_otp(client, base_addr, in rkotp_read_module_info()
372 1, &otp_ptr->basic_data.checksum); in rkotp_read_module_info()
373 if ((checksum % 255 + 1) == otp_ptr->basic_data.checksum && (!ret)) { in rkotp_read_module_info()
374 otp_ptr->basic_data.flag = 0x01; in rkotp_read_module_info()
375 otp_ptr->flag++; in rkotp_read_module_info()
376 dev_info(dev, "fasic info: supplier_id(0x%x) lens(0x%x) time(%d_%d_%d) module id %x\n", in rkotp_read_module_info()
377 otp_ptr->basic_data.id.supplier_id, in rkotp_read_module_info()
378 otp_ptr->basic_data.id.lens_id, in rkotp_read_module_info()
379 otp_ptr->basic_data.id.year, in rkotp_read_module_info()
380 otp_ptr->basic_data.id.month, in rkotp_read_module_info()
381 otp_ptr->basic_data.id.day, in rkotp_read_module_info()
382 (u32)(*otp_ptr->basic_data.modul_id)); in rkotp_read_module_info()
384 otp_ptr->basic_data.flag = 0; in rkotp_read_module_info()
387 (int)otp_ptr->basic_data.checksum); in rkotp_read_module_info()
389 otp_ptr->basic_data.id.supplier_id, in rkotp_read_module_info()
390 otp_ptr->basic_data.id.lens_id, in rkotp_read_module_info()
391 otp_ptr->basic_data.id.year, in rkotp_read_module_info()
392 otp_ptr->basic_data.id.month, in rkotp_read_module_info()
393 otp_ptr->basic_data.id.day); in rkotp_read_module_info()
395 otp_ptr->basic_data.size.width, in rkotp_read_module_info()
396 otp_ptr->basic_data.size.height, in rkotp_read_module_info()
397 otp_ptr->basic_data.mirror_flip); in rkotp_read_module_info()
405 struct i2c_client *client = eeprom_dev->client; in rkotp_read_awb() local
406 struct device *dev = &eeprom_dev->client->dev; in rkotp_read_awb()
412 ret = read_reg_otp(client, base_addr, in rkotp_read_awb()
413 4, &otp_ptr->awb_data.size); in rkotp_read_awb()
414 checksum += otp_ptr->awb_data.size; in rkotp_read_awb()
416 ret |= read_reg_otp(client, base_addr, in rkotp_read_awb()
417 2, &otp_ptr->awb_data.version); in rkotp_read_awb()
418 checksum += otp_ptr->awb_data.version; in rkotp_read_awb()
420 ret |= read_reg_otp(client, base_addr, in rkotp_read_awb()
421 2, &otp_ptr->awb_data.r_ratio); in rkotp_read_awb()
422 checksum += otp_ptr->awb_data.r_ratio; in rkotp_read_awb()
424 ret |= read_reg_otp(client, base_addr, in rkotp_read_awb()
425 2, &otp_ptr->awb_data.b_ratio); in rkotp_read_awb()
426 checksum += otp_ptr->awb_data.b_ratio; in rkotp_read_awb()
428 ret |= read_reg_otp(client, base_addr, in rkotp_read_awb()
429 2, &otp_ptr->awb_data.g_ratio); in rkotp_read_awb()
430 checksum += otp_ptr->awb_data.g_ratio; in rkotp_read_awb()
432 ret |= read_reg_otp(client, base_addr, in rkotp_read_awb()
433 2, &otp_ptr->awb_data.r_golden); in rkotp_read_awb()
434 checksum += otp_ptr->awb_data.r_golden; in rkotp_read_awb()
436 ret |= read_reg_otp(client, base_addr, in rkotp_read_awb()
437 2, &otp_ptr->awb_data.b_golden); in rkotp_read_awb()
438 checksum += otp_ptr->awb_data.b_golden; in rkotp_read_awb()
440 ret |= read_reg_otp(client, base_addr, in rkotp_read_awb()
441 2, &otp_ptr->awb_data.g_golden); in rkotp_read_awb()
442 checksum += otp_ptr->awb_data.g_golden; in rkotp_read_awb()
445 ret |= read_reg_otp(client, base_addr, in rkotp_read_awb()
450 ret |= read_reg_otp(client, base_addr, in rkotp_read_awb()
451 1, &otp_ptr->awb_data.checksum); in rkotp_read_awb()
453 if ((checksum % 255 + 1) == otp_ptr->awb_data.checksum && (!ret)) { in rkotp_read_awb()
454 otp_ptr->awb_data.flag = 0x01; in rkotp_read_awb()
455 otp_ptr->flag++; in rkotp_read_awb()
457 otp_ptr->awb_data.version); in rkotp_read_awb()
459 otp_ptr->awb_data.r_ratio, in rkotp_read_awb()
460 otp_ptr->awb_data.b_ratio, in rkotp_read_awb()
461 otp_ptr->awb_data.g_ratio); in rkotp_read_awb()
463 otp_ptr->awb_data.r_golden, in rkotp_read_awb()
464 otp_ptr->awb_data.b_golden, in rkotp_read_awb()
465 otp_ptr->awb_data.g_golden); in rkotp_read_awb()
467 otp_ptr->awb_data.flag = 0; in rkotp_read_awb()
470 (int) otp_ptr->awb_data.checksum); in rkotp_read_awb()
478 struct i2c_client *client = eeprom_dev->client; in rkotp_read_lsc() local
479 struct device *dev = &eeprom_dev->client->dev; in rkotp_read_lsc()
494 ret = read_reg_otp(client, base_addr, in rkotp_read_lsc()
495 4, &otp_ptr->lsc_data.size); in rkotp_read_lsc()
496 checksum += otp_ptr->lsc_data.size; in rkotp_read_lsc()
498 ret |= read_reg_otp(client, base_addr, in rkotp_read_lsc()
499 2, &otp_ptr->lsc_data.version); in rkotp_read_lsc()
500 checksum += otp_ptr->lsc_data.version; in rkotp_read_lsc()
503 ret |= read_reg_otp_buf(client, base_addr, in rkotp_read_lsc()
508 otp_ptr->lsc_data.data[i] = lsc_buf[i]; in rkotp_read_lsc()
511 otp_ptr->lsc_data.table_size = LSC_DATA_SIZE; in rkotp_read_lsc()
518 dev_info(dev, "%d ", otp_ptr->lsc_data.data[i * w + j]); in rkotp_read_lsc()
525 ret |= read_reg_otp_buf(client, base_addr, in rkotp_read_lsc()
532 ret |= read_reg_otp(client, base_addr, in rkotp_read_lsc()
533 1, &otp_ptr->lsc_data.checksum); in rkotp_read_lsc()
534 if ((checksum % 255 + 1) == otp_ptr->lsc_data.checksum && (!ret)) { in rkotp_read_lsc()
535 otp_ptr->lsc_data.flag = 0x01; in rkotp_read_lsc()
536 otp_ptr->flag++; in rkotp_read_lsc()
538 otp_ptr->lsc_data.version, in rkotp_read_lsc()
539 (int)otp_ptr->lsc_data.checksum); in rkotp_read_lsc()
541 otp_ptr->lsc_data.flag = 0x00; in rkotp_read_lsc()
544 (int)otp_ptr->lsc_data.checksum); in rkotp_read_lsc()
553 struct i2c_client *client = eeprom_dev->client; in rkotp_read_pdaf() local
554 struct device *dev = &eeprom_dev->client->dev; in rkotp_read_pdaf()
569 ret = read_reg_otp(client, base_addr, in rkotp_read_pdaf()
570 4, &otp_ptr->pdaf_data.size); in rkotp_read_pdaf()
571 checksum += otp_ptr->pdaf_data.size; in rkotp_read_pdaf()
573 ret |= read_reg_otp(client, base_addr, in rkotp_read_pdaf()
574 2, &otp_ptr->pdaf_data.version); in rkotp_read_pdaf()
575 checksum += otp_ptr->pdaf_data.version; in rkotp_read_pdaf()
577 ret |= read_reg_otp(client, base_addr, in rkotp_read_pdaf()
578 1, &otp_ptr->pdaf_data.gainmap_width); in rkotp_read_pdaf()
579 checksum += otp_ptr->pdaf_data.gainmap_width; in rkotp_read_pdaf()
581 ret |= read_reg_otp(client, base_addr, in rkotp_read_pdaf()
582 1, &otp_ptr->pdaf_data.gainmap_height); in rkotp_read_pdaf()
583 checksum += otp_ptr->pdaf_data.gainmap_height; in rkotp_read_pdaf()
586 ret |= read_reg_otp_buf(client, base_addr, in rkotp_read_pdaf()
591 otp_ptr->pdaf_data.gainmap[i] = pdaf_buf[i]; in rkotp_read_pdaf()
592 checksum += otp_ptr->pdaf_data.gainmap[i]; in rkotp_read_pdaf()
600 dev_info(dev, "%d ", otp_ptr->pdaf_data.gainmap[i * w + j]); in rkotp_read_pdaf()
605 ret |= read_reg_otp(client, base_addr, in rkotp_read_pdaf()
606 1, &otp_ptr->pdaf_data.gainmap_checksum); in rkotp_read_pdaf()
607 checksum += otp_ptr->pdaf_data.gainmap_checksum; in rkotp_read_pdaf()
609 ret |= read_reg_otp(client, base_addr, in rkotp_read_pdaf()
610 1, &otp_ptr->pdaf_data.dcc_mode); in rkotp_read_pdaf()
611 checksum += otp_ptr->pdaf_data.dcc_mode; in rkotp_read_pdaf()
613 ret |= read_reg_otp(client, base_addr, in rkotp_read_pdaf()
614 1, &otp_ptr->pdaf_data.dcc_dir); in rkotp_read_pdaf()
615 checksum += otp_ptr->pdaf_data.dcc_dir; in rkotp_read_pdaf()
617 ret |= read_reg_otp(client, base_addr, in rkotp_read_pdaf()
618 1, &otp_ptr->pdaf_data.dccmap_width); in rkotp_read_pdaf()
619 checksum += otp_ptr->pdaf_data.dccmap_width; in rkotp_read_pdaf()
621 ret |= read_reg_otp(client, base_addr, in rkotp_read_pdaf()
622 1, &otp_ptr->pdaf_data.dccmap_height); in rkotp_read_pdaf()
623 checksum += otp_ptr->pdaf_data.dccmap_height; in rkotp_read_pdaf()
627 ret |= read_reg_otp_buf(client, base_addr, in rkotp_read_pdaf()
631 otp_ptr->pdaf_data.dccmap[i] = pdaf_buf[i]; in rkotp_read_pdaf()
632 checksum += otp_ptr->pdaf_data.dccmap[i]; in rkotp_read_pdaf()
642 dev_info(dev, "%d ", otp_ptr->pdaf_data.dccmap[i * w + j]); in rkotp_read_pdaf()
647 ret |= read_reg_otp(client, base_addr, in rkotp_read_pdaf()
648 1, &otp_ptr->pdaf_data.dccmap_checksum); in rkotp_read_pdaf()
649 checksum += otp_ptr->pdaf_data.dccmap_checksum; in rkotp_read_pdaf()
653 ret |= read_reg_otp_buf(client, base_addr, in rkotp_read_pdaf()
661 ret |= read_reg_otp(client, base_addr, in rkotp_read_pdaf()
662 1, &otp_ptr->pdaf_data.checksum); in rkotp_read_pdaf()
663 if ((checksum % 255 + 1) == otp_ptr->pdaf_data.checksum && (!ret)) { in rkotp_read_pdaf()
664 otp_ptr->pdaf_data.flag = 0x01; in rkotp_read_pdaf()
665 otp_ptr->flag++; in rkotp_read_pdaf()
667 otp_ptr->pdaf_data.version, in rkotp_read_pdaf()
668 (int)otp_ptr->pdaf_data.checksum); in rkotp_read_pdaf()
670 otp_ptr->pdaf_data.flag = 0x00; in rkotp_read_pdaf()
673 (int)otp_ptr->pdaf_data.checksum); in rkotp_read_pdaf()
682 struct i2c_client *client = eeprom_dev->client; in rkotp_read_af() local
683 struct device *dev = &eeprom_dev->client->dev; in rkotp_read_af()
689 ret = read_reg_otp(client, base_addr, in rkotp_read_af()
690 4, &otp_ptr->af_data.size); in rkotp_read_af()
691 checksum += otp_ptr->af_data.size; in rkotp_read_af()
693 ret |= read_reg_otp(client, base_addr, in rkotp_read_af()
694 2, &otp_ptr->af_data.version); in rkotp_read_af()
695 checksum += otp_ptr->af_data.version; in rkotp_read_af()
697 ret |= read_reg_otp(client, base_addr, in rkotp_read_af()
698 2, &otp_ptr->af_data.af_inf); in rkotp_read_af()
699 checksum += otp_ptr->af_data.af_inf; in rkotp_read_af()
701 ret |= read_reg_otp(client, base_addr, in rkotp_read_af()
702 2, &otp_ptr->af_data.af_macro); in rkotp_read_af()
703 checksum += otp_ptr->af_data.af_macro; in rkotp_read_af()
706 ret |= read_reg_otp(client, base_addr, in rkotp_read_af()
712 ret |= read_reg_otp(client, base_addr, in rkotp_read_af()
713 1, &otp_ptr->af_data.checksum); in rkotp_read_af()
714 if ((checksum % 255 + 1) == otp_ptr->af_data.checksum && (!ret)) { in rkotp_read_af()
715 otp_ptr->af_data.flag = 0x01; in rkotp_read_af()
716 otp_ptr->flag++; in rkotp_read_af()
718 otp_ptr->af_data.version, in rkotp_read_af()
719 (int)otp_ptr->af_data.checksum); in rkotp_read_af()
721 otp_ptr->af_data.flag = 0x00; in rkotp_read_af()
724 (int)otp_ptr->af_data.checksum); in rkotp_read_af()
731 struct i2c_client *client = eeprom_dev->client; in rkotp_read_data() local
733 struct device *dev = &eeprom_dev->client->dev; in rkotp_read_data()
734 u32 id = 0; in rkotp_read_data() local
741 return -ENOMEM; in rkotp_read_data()
743 otp_ptr->flag = 0; in rkotp_read_data()
745 read_reg_otp(client, base_addr, 1, &id); in rkotp_read_data()
746 dev_info(dev, "show block id %d, addr 0x%x\n", id, base_addr); in rkotp_read_data()
747 switch (id) { in rkotp_read_data()
779 id = -1; in rkotp_read_data()
782 if (id == -1) in rkotp_read_data()
785 if (otp_ptr->flag) { in rkotp_read_data()
786 eeprom_dev->otp = otp_ptr; in rkotp_read_data()
789 eeprom_dev->otp = NULL; in rkotp_read_data()
791 dev_warn(&client->dev, "otp is NULL!\n"); in rkotp_read_data()
792 ret = -1; in rkotp_read_data()
800 struct i2c_client *client = eeprom_dev->client; in otp_read() local
802 mutex_lock(&eeprom_dev->mutex); in otp_read()
803 vendor_flag = get_vendor_flag(client); in otp_read()
809 dev_warn(&client->dev, "no vendor flag infos!\n"); in otp_read()
810 mutex_unlock(&eeprom_dev->mutex); in otp_read()
811 return -1; in otp_read()
814 mutex_unlock(&eeprom_dev->mutex); in otp_read()
825 if (!eeprom_dev->otp) { in eeprom_ioctl()
827 ret = -EFAULT; in eeprom_ioctl()
829 if (arg && eeprom_dev->otp) in eeprom_ioctl()
830 memcpy(arg, eeprom_dev->otp, in eeprom_ioctl()
833 ret = -EFAULT; in eeprom_ioctl()
840 struct eeprom_device *dev = p->private; in otp_eeprom_show()
846 if (dev && dev->otp) { in otp_eeprom_show()
850 if (dev->otp->awb_data.flag) { in otp_eeprom_show()
852 seq_printf(p, "flag=%d;\n", dev->otp->awb_data.flag); in otp_eeprom_show()
853 seq_printf(p, "r_value=%d;\n", dev->otp->awb_data.r_ratio); in otp_eeprom_show()
854 seq_printf(p, "b_value=%d;\n", dev->otp->awb_data.b_ratio); in otp_eeprom_show()
855 seq_printf(p, "gr_value=%d;\n", dev->otp->awb_data.g_ratio); in otp_eeprom_show()
856 seq_puts(p, "gb_value=-1;\n"); in otp_eeprom_show()
857 seq_printf(p, "golden_r_value=%d;\n", dev->otp->awb_data.r_golden); in otp_eeprom_show()
858 seq_printf(p, "golden_b_value=%d;\n", dev->otp->awb_data.b_golden); in otp_eeprom_show()
859 seq_printf(p, "golden_gr_value=%d;\n", dev->otp->awb_data.g_golden); in otp_eeprom_show()
860 seq_puts(p, "golden_gb_value=-1;\n\n"); in otp_eeprom_show()
863 seq_printf(p, "flag=%d;\n", dev->otp->lsc_data.flag); in otp_eeprom_show()
864 seq_printf(p, "width=%d;\n", dev->otp->basic_data.size.width); in otp_eeprom_show()
865 seq_printf(p, "height=%d;\n", dev->otp->basic_data.size.height); in otp_eeprom_show()
866 seq_printf(p, "tablesize=%d;\n\n", dev->otp->lsc_data.table_size); in otp_eeprom_show()
871 seq_printf(p, "%d", (dev->otp->lsc_data.data[(i * 17 + j) * 2] << 8) in otp_eeprom_show()
872 | dev->otp->lsc_data.data[(i * 17 + j) * 2 + 1]); in otp_eeprom_show()
882 if (dev->otp->lsc_data.flag) { in otp_eeprom_show()
886 seq_printf(p, "%d", (dev->otp->lsc_data.data[(i * 17 + j) * 2 + in otp_eeprom_show()
887 1734] << 8) | dev->otp->lsc_data.data[(i * 17 + j) * in otp_eeprom_show()
900 seq_printf(p, "%d", (dev->otp->lsc_data.data[(i * 17 + j) * 2 + in otp_eeprom_show()
901 578] << 8) | dev->otp->lsc_data.data[(i * 17 + j) * in otp_eeprom_show()
914 seq_printf(p, "%d", (dev->otp->lsc_data.data[(i * 17 + j) * 2 + in otp_eeprom_show()
915 1156] << 8) | dev->otp->lsc_data.data[(i * 17 + j) * in otp_eeprom_show()
925 if (dev->otp->pdaf_data.flag) { in otp_eeprom_show()
926 gainmap_w = dev->otp->pdaf_data.gainmap_width; in otp_eeprom_show()
927 gainmap_h = dev->otp->pdaf_data.gainmap_height; in otp_eeprom_show()
928 dccmap_w = dev->otp->pdaf_data.dccmap_width; in otp_eeprom_show()
929 dccmap_h = dev->otp->pdaf_data.dccmap_height; in otp_eeprom_show()
931 seq_printf(p, "flag=%d;\n", dev->otp->pdaf_data.flag); in otp_eeprom_show()
939 (dev->otp->pdaf_data.gainmap[(i * gainmap_w + j) * 2] << 8) | in otp_eeprom_show()
940 dev->otp->pdaf_data.gainmap[(i * gainmap_w + j) * 2 + 1]); in otp_eeprom_show()
948 seq_printf(p, "dcc_mode=%d\n", dev->otp->pdaf_data.dcc_mode); in otp_eeprom_show()
949 seq_printf(p, "dcc_dir=%d\n", dev->otp->pdaf_data.dcc_dir); in otp_eeprom_show()
950 seq_printf(p, "dccmap_width=%d\n", dev->otp->pdaf_data.dccmap_width); in otp_eeprom_show()
951 seq_printf(p, "dccmap_height=%d\n", dev->otp->pdaf_data.dccmap_height); in otp_eeprom_show()
955 (dev->otp->pdaf_data.dccmap[(i * dccmap_w + j) * 2] << 8) | in otp_eeprom_show()
956 dev->otp->pdaf_data.dccmap[(i * dccmap_w + j) * 2 + 1]); in otp_eeprom_show()
966 if (dev->otp->af_data.flag) { in otp_eeprom_show()
968 seq_printf(p, "flag=%d;\n", dev->otp->af_data.flag); in otp_eeprom_show()
969 seq_printf(p, "af_inf=%d;\n", dev->otp->af_data.af_inf); in otp_eeprom_show()
970 seq_printf(p, "af_macro=%d;\n", dev->otp->af_data.af_macro); in otp_eeprom_show()
994 dev->procfs = proc_create_data(dev->name, 0, NULL, &ops, dev); in eeprom_proc_init()
995 if (!dev->procfs) in eeprom_proc_init()
996 return -EINVAL; in eeprom_proc_init()
1002 if (dev->procfs) in eeprom_proc_cleanup()
1003 remove_proc_entry(dev->name, NULL); in eeprom_proc_cleanup()
1004 dev->procfs = NULL; in eeprom_proc_cleanup()
1019 v4l2_device_unregister_subdev(&dev->sd); in eeprom_subdev_cleanup()
1020 media_entity_cleanup(&dev->sd.entity); in eeprom_subdev_cleanup()
1023 static int eeprom_probe(struct i2c_client *client, in eeprom_probe() argument
1024 const struct i2c_device_id *id) in eeprom_probe() argument
1028 dev_info(&client->dev, "driver version: %02x.%02x.%02x", in eeprom_probe()
1033 eeprom_dev = devm_kzalloc(&client->dev, in eeprom_probe()
1038 dev_err(&client->dev, "Probe failed\n"); in eeprom_probe()
1039 return -ENOMEM; in eeprom_probe()
1041 mutex_init(&eeprom_dev->mutex); in eeprom_probe()
1042 v4l2_i2c_subdev_init(&eeprom_dev->sd, in eeprom_probe()
1043 client, &eeprom_ops); in eeprom_probe()
1044 eeprom_dev->client = client; in eeprom_probe()
1045 snprintf(eeprom_dev->name, sizeof(eeprom_dev->name), "%s-%d-%02x", in eeprom_probe()
1046 DEVICE_NAME, i2c_adapter_id(client->adapter), client->addr); in eeprom_probe()
1048 pm_runtime_set_active(&client->dev); in eeprom_probe()
1049 pm_runtime_enable(&client->dev); in eeprom_probe()
1050 pm_runtime_idle(&client->dev); in eeprom_probe()
1052 dev_info(&client->dev, "probing successful\n"); in eeprom_probe()
1057 static int eeprom_remove(struct i2c_client *client) in eeprom_remove() argument
1059 struct v4l2_subdev *sd = i2c_get_clientdata(client); in eeprom_remove()
1062 kfree(eeprom_dev->otp); in eeprom_remove()
1063 mutex_destroy(&eeprom_dev->mutex); in eeprom_remove()
1064 pm_runtime_disable(&client->dev); in eeprom_remove()