Lines Matching refs:client
425 static struct rj54n1 *to_rj54n1(const struct i2c_client *client) in to_rj54n1() argument
427 return container_of(i2c_get_clientdata(client), struct rj54n1, subdev); in to_rj54n1()
430 static int reg_read(struct i2c_client *client, const u16 reg) in reg_read() argument
432 struct rj54n1 *rj54n1 = to_rj54n1(client); in reg_read()
437 dev_dbg(&client->dev, "[0x%x] = 0x%x\n", 0xff, reg >> 8); in reg_read()
438 ret = i2c_smbus_write_byte_data(client, 0xff, reg >> 8); in reg_read()
443 return i2c_smbus_read_byte_data(client, reg & 0xff); in reg_read()
446 static int reg_write(struct i2c_client *client, const u16 reg, in reg_write() argument
449 struct rj54n1 *rj54n1 = to_rj54n1(client); in reg_write()
454 dev_dbg(&client->dev, "[0x%x] = 0x%x\n", 0xff, reg >> 8); in reg_write()
455 ret = i2c_smbus_write_byte_data(client, 0xff, reg >> 8); in reg_write()
460 dev_dbg(&client->dev, "[0x%x] = 0x%x\n", reg & 0xff, data); in reg_write()
461 return i2c_smbus_write_byte_data(client, reg & 0xff, data); in reg_write()
464 static int reg_set(struct i2c_client *client, const u16 reg, in reg_set() argument
469 ret = reg_read(client, reg); in reg_set()
472 return reg_write(client, reg, (ret & ~mask) | (data & mask)); in reg_set()
475 static int reg_write_multiple(struct i2c_client *client, in reg_write_multiple() argument
481 ret = reg_write(client, rv->reg, rv->val); in reg_write_multiple()
503 struct i2c_client *client = v4l2_get_subdevdata(sd); in rj54n1_s_stream() local
506 return reg_set(client, RJ54N1_STILL_CONTROL, (!enable) << 7, 0x80); in rj54n1_s_stream()
509 static int rj54n1_set_rect(struct i2c_client *client, in rj54n1_set_rect() argument
515 ret = reg_write(client, reg_xy, in rj54n1_set_rect()
520 ret = reg_write(client, reg_x, width & 0xff); in rj54n1_set_rect()
522 ret = reg_write(client, reg_y, height & 0xff); in rj54n1_set_rect()
531 static int rj54n1_commit(struct i2c_client *client) in rj54n1_commit() argument
533 int ret = reg_write(client, RJ54N1_INIT_START, 1); in rj54n1_commit()
536 ret = reg_write(client, RJ54N1_INIT_START, 0); in rj54n1_commit()
547 struct i2c_client *client = v4l2_get_subdevdata(sd); in rj54n1_set_selection() local
548 struct rj54n1 *rj54n1 = to_rj54n1(client); in rj54n1_set_selection()
564 dev_dbg(&client->dev, "Scaling for %dx%d : %u = %dx%d\n", in rj54n1_set_selection()
584 struct i2c_client *client = v4l2_get_subdevdata(sd); in rj54n1_get_selection() local
585 struct rj54n1 *rj54n1 = to_rj54n1(client); in rj54n1_get_selection()
610 struct i2c_client *client = v4l2_get_subdevdata(sd); in rj54n1_get_fmt() local
611 struct rj54n1 *rj54n1 = to_rj54n1(client); in rj54n1_get_fmt()
636 struct i2c_client *client = v4l2_get_subdevdata(sd); in rj54n1_sensor_scale() local
637 struct rj54n1 *rj54n1 = to_rj54n1(client); in rj54n1_sensor_scale()
658 dev_dbg(&client->dev, "Adjusted output width: in %u, out %u\n", in rj54n1_sensor_scale()
670 dev_dbg(&client->dev, "Adjusted output height: in %u, out %u\n", in rj54n1_sensor_scale()
675 ret = rj54n1_set_rect(client, RJ54N1_X_OUTPUT_SIZE_S_L, in rj54n1_sensor_scale()
679 ret = rj54n1_set_rect(client, RJ54N1_X_OUTPUT_SIZE_P_L, in rj54n1_sensor_scale()
725 ret = reg_write(client, RJ54N1_RESIZE_HOLD_L, resize & 0xff); in rj54n1_sensor_scale()
727 ret = reg_write(client, RJ54N1_RESIZE_HOLD_H, resize >> 8); in rj54n1_sensor_scale()
753 ret = reg_write(client, RJ54N1_INC_USE_SEL_L, inc_sel & 0xfc); in rj54n1_sensor_scale()
755 ret = reg_write(client, RJ54N1_INC_USE_SEL_H, inc_sel >> 8); in rj54n1_sensor_scale()
767 ret = reg_write(client, RJ54N1_BIT8_WB, wb_bit8); in rj54n1_sensor_scale()
769 ret = reg_write(client, RJ54N1_HCAPS_WB, wb_left); in rj54n1_sensor_scale()
771 ret = reg_write(client, RJ54N1_VCAPS_WB, wb_top); in rj54n1_sensor_scale()
773 ret = reg_write(client, RJ54N1_HCAPE_WB, wb_right); in rj54n1_sensor_scale()
775 ret = reg_write(client, RJ54N1_VCAPE_WB, wb_bottom); in rj54n1_sensor_scale()
785 ret = reg_write(client, RJ54N1_PEAK_H, in rj54n1_sensor_scale()
788 ret = reg_write(client, RJ54N1_PEAK_50, peak_50); in rj54n1_sensor_scale()
790 ret = reg_write(client, RJ54N1_PEAK_60, peak_60); in rj54n1_sensor_scale()
792 ret = reg_write(client, RJ54N1_PEAK_DIFF, peak / 150); in rj54n1_sensor_scale()
796 ret = reg_write(client, RJ54N1_RESIZE_CONTROL, in rj54n1_sensor_scale()
805 ret = reg_write(client, RJ54N1_RESIZE_CONTROL, RESIZE_HOLD_SEL | 1); in rj54n1_sensor_scale()
814 dev_dbg(&client->dev, "Scaled for %dx%d : %u = %ux%u, skip %u\n", in rj54n1_sensor_scale()
820 static int rj54n1_set_clock(struct i2c_client *client) in rj54n1_set_clock() argument
822 struct rj54n1 *rj54n1 = to_rj54n1(client); in rj54n1_set_clock()
826 ret = reg_write(client, RJ54N1_RESET_STANDBY, E_EXCLK | SOFT_STDBY); in rj54n1_set_clock()
829 ret = reg_write(client, RJ54N1_RESET_STANDBY, E_EXCLK); in rj54n1_set_clock()
832 ret = reg_write(client, RJ54N1_PLL_L, PLL_L); in rj54n1_set_clock()
834 ret = reg_write(client, RJ54N1_PLL_N, PLL_N); in rj54n1_set_clock()
838 ret = reg_write(client, RJ54N1_RATIO_TG, in rj54n1_set_clock()
841 ret = reg_write(client, RJ54N1_RATIO_T, in rj54n1_set_clock()
844 ret = reg_write(client, RJ54N1_RATIO_R, in rj54n1_set_clock()
849 ret = reg_write(client, RJ54N1_RAMP_TGCLK_EN, 3); in rj54n1_set_clock()
853 ret = reg_write(client, RJ54N1_OCLK_DSP, 0); in rj54n1_set_clock()
857 ret = reg_write(client, RJ54N1_RATIO_OP, in rj54n1_set_clock()
860 ret = reg_write(client, RJ54N1_RATIO_O, in rj54n1_set_clock()
865 ret = reg_write(client, RJ54N1_OCLK_SEL_EN, 1); in rj54n1_set_clock()
869 ret = reg_write(client, RJ54N1_TG_BYPASS, 2); in rj54n1_set_clock()
873 ret = reg_write(client, RJ54N1_RESET_STANDBY, in rj54n1_set_clock()
877 ret = reg_write(client, RJ54N1_PLL_EN, 1); in rj54n1_set_clock()
884 ret = reg_write(client, RJ54N1_CLK_RST, 1); in rj54n1_set_clock()
887 ret = reg_read(client, RJ54N1_CLK_RST); in rj54n1_set_clock()
889 dev_err(&client->dev, in rj54n1_set_clock()
895 ret = reg_set(client, RJ54N1_OCLK_DSP, 1, 1); in rj54n1_set_clock()
899 ret = reg_write(client, RJ54N1_OCLK_SEL_EN, 1); in rj54n1_set_clock()
904 static int rj54n1_reg_init(struct i2c_client *client) in rj54n1_reg_init() argument
906 struct rj54n1 *rj54n1 = to_rj54n1(client); in rj54n1_reg_init()
907 int ret = rj54n1_set_clock(client); in rj54n1_reg_init()
910 ret = reg_write_multiple(client, bank_7, ARRAY_SIZE(bank_7)); in rj54n1_reg_init()
912 ret = reg_write_multiple(client, bank_10, ARRAY_SIZE(bank_10)); in rj54n1_reg_init()
916 ret = reg_write(client, RJ54N1_SCALE_1_2_LEV, 3 | (7 << 4)); in rj54n1_reg_init()
918 ret = reg_write(client, RJ54N1_SCALE_4_LEV, 0xf); in rj54n1_reg_init()
922 ret = reg_write(client, RJ54N1_RESIZE_CONTROL, in rj54n1_reg_init()
927 ret = reg_write(client, RJ54N1_Y_GAIN, 0x84); in rj54n1_reg_init()
934 ret = reg_write(client, RJ54N1_MIRROR_STILL_MODE, 0x27); in rj54n1_reg_init()
937 ret = reg_write_multiple(client, bank_4, ARRAY_SIZE(bank_4)); in rj54n1_reg_init()
941 ret = reg_write(client, RJ54N1_EXPOSURE_CONTROL, 0x80); in rj54n1_reg_init()
944 ret = reg_read(client, RJ54N1_WB_SEL_WEIGHT_I); in rj54n1_reg_init()
947 ret = reg_write_multiple(client, bank_5, ARRAY_SIZE(bank_5)); in rj54n1_reg_init()
950 ret = reg_write_multiple(client, bank_8, ARRAY_SIZE(bank_8)); in rj54n1_reg_init()
953 ret = reg_write(client, RJ54N1_RESET_STANDBY, in rj54n1_reg_init()
958 ret = rj54n1_commit(client); in rj54n1_reg_init()
962 ret = reg_write(client, RJ54N1_RESET_STANDBY, in rj54n1_reg_init()
967 ret = reg_write(client, RJ54N1_FWFLG, 2); in rj54n1_reg_init()
980 struct i2c_client *client = v4l2_get_subdevdata(sd); in rj54n1_set_fmt() local
981 struct rj54n1 *rj54n1 = to_rj54n1(client); in rj54n1_set_fmt()
995 dev_dbg(&client->dev, "%s: code = %d, width = %u, height = %u\n", in rj54n1_set_fmt()
1020 ret = reg_read(client, RJ54N1_RESET_STANDBY); in rj54n1_set_fmt()
1025 ret = rj54n1_reg_init(client); in rj54n1_set_fmt()
1033 ret = reg_write(client, RJ54N1_OUT_SEL, 0); in rj54n1_set_fmt()
1035 ret = reg_set(client, RJ54N1_BYTE_SWAP, 8, 8); in rj54n1_set_fmt()
1038 ret = reg_write(client, RJ54N1_OUT_SEL, 0); in rj54n1_set_fmt()
1040 ret = reg_set(client, RJ54N1_BYTE_SWAP, 0, 8); in rj54n1_set_fmt()
1043 ret = reg_write(client, RJ54N1_OUT_SEL, 0x11); in rj54n1_set_fmt()
1045 ret = reg_set(client, RJ54N1_BYTE_SWAP, 8, 8); in rj54n1_set_fmt()
1048 ret = reg_write(client, RJ54N1_OUT_SEL, 0x11); in rj54n1_set_fmt()
1050 ret = reg_set(client, RJ54N1_BYTE_SWAP, 0, 8); in rj54n1_set_fmt()
1053 ret = reg_write(client, RJ54N1_OUT_SEL, 4); in rj54n1_set_fmt()
1055 ret = reg_set(client, RJ54N1_BYTE_SWAP, 8, 8); in rj54n1_set_fmt()
1057 ret = reg_write(client, RJ54N1_RA_SEL_UL, 0); in rj54n1_set_fmt()
1060 ret = reg_write(client, RJ54N1_OUT_SEL, 4); in rj54n1_set_fmt()
1062 ret = reg_set(client, RJ54N1_BYTE_SWAP, 8, 8); in rj54n1_set_fmt()
1064 ret = reg_write(client, RJ54N1_RA_SEL_UL, 8); in rj54n1_set_fmt()
1067 ret = reg_write(client, RJ54N1_OUT_SEL, 4); in rj54n1_set_fmt()
1069 ret = reg_set(client, RJ54N1_BYTE_SWAP, 0, 8); in rj54n1_set_fmt()
1071 ret = reg_write(client, RJ54N1_RA_SEL_UL, 0); in rj54n1_set_fmt()
1074 ret = reg_write(client, RJ54N1_OUT_SEL, 4); in rj54n1_set_fmt()
1076 ret = reg_set(client, RJ54N1_BYTE_SWAP, 0, 8); in rj54n1_set_fmt()
1078 ret = reg_write(client, RJ54N1_RA_SEL_UL, 8); in rj54n1_set_fmt()
1081 ret = reg_write(client, RJ54N1_OUT_SEL, 5); in rj54n1_set_fmt()
1089 ret = reg_set(client, RJ54N1_OCLK_SEL_EN, in rj54n1_set_fmt()
1132 struct i2c_client *client = v4l2_get_subdevdata(sd); in rj54n1_g_register() local
1139 reg->val = reg_read(client, reg->reg); in rj54n1_g_register()
1150 struct i2c_client *client = v4l2_get_subdevdata(sd); in rj54n1_s_register() local
1156 if (reg_write(client, reg->reg, reg->val) < 0) in rj54n1_s_register()
1165 struct i2c_client *client = v4l2_get_subdevdata(sd); in rj54n1_s_power() local
1166 struct rj54n1 *rj54n1 = to_rj54n1(client); in rj54n1_s_power()
1193 struct i2c_client *client = v4l2_get_subdevdata(sd); in rj54n1_s_ctrl() local
1199 data = reg_set(client, RJ54N1_MIRROR_STILL_MODE, 0, 1); in rj54n1_s_ctrl()
1201 data = reg_set(client, RJ54N1_MIRROR_STILL_MODE, 1, 1); in rj54n1_s_ctrl()
1207 data = reg_set(client, RJ54N1_MIRROR_STILL_MODE, 0, 2); in rj54n1_s_ctrl()
1209 data = reg_set(client, RJ54N1_MIRROR_STILL_MODE, 2, 2); in rj54n1_s_ctrl()
1214 if (reg_write(client, RJ54N1_Y_GAIN, ctrl->val * 2) < 0) in rj54n1_s_ctrl()
1219 if (reg_set(client, RJ54N1_WB_SEL_WEIGHT_I, ctrl->val << 7, in rj54n1_s_ctrl()
1263 static int rj54n1_video_probe(struct i2c_client *client, in rj54n1_video_probe() argument
1266 struct rj54n1 *rj54n1 = to_rj54n1(client); in rj54n1_video_probe()
1275 data1 = reg_read(client, RJ54N1_DEV_CODE); in rj54n1_video_probe()
1276 data2 = reg_read(client, RJ54N1_DEV_CODE2); in rj54n1_video_probe()
1280 dev_info(&client->dev, "No RJ54N1CB0C found, read 0x%x:0x%x\n", in rj54n1_video_probe()
1286 ret = reg_write(client, RJ54N1_IOC, priv->ioctl_high << 7); in rj54n1_video_probe()
1290 dev_info(&client->dev, "Detected a RJ54N1CB0C chip ID 0x%x:0x%x\n", in rj54n1_video_probe()
1300 static int rj54n1_probe(struct i2c_client *client) in rj54n1_probe() argument
1303 struct i2c_adapter *adapter = client->adapter; in rj54n1_probe()
1307 if (!client->dev.platform_data) { in rj54n1_probe()
1308 dev_err(&client->dev, "RJ54N1CB0C: missing platform data!\n"); in rj54n1_probe()
1312 rj54n1_priv = client->dev.platform_data; in rj54n1_probe()
1320 rj54n1 = devm_kzalloc(&client->dev, sizeof(struct rj54n1), GFP_KERNEL); in rj54n1_probe()
1324 v4l2_i2c_subdev_init(&rj54n1->subdev, client, &rj54n1_subdev_ops); in rj54n1_probe()
1350 rj54n1->clk = clk_get(&client->dev, NULL); in rj54n1_probe()
1356 rj54n1->pwup_gpio = gpiod_get_optional(&client->dev, "powerup", in rj54n1_probe()
1359 dev_info(&client->dev, "Unable to get GPIO \"powerup\": %ld\n", in rj54n1_probe()
1365 rj54n1->enable_gpio = gpiod_get_optional(&client->dev, "enable", in rj54n1_probe()
1368 dev_info(&client->dev, "Unable to get GPIO \"enable\": %ld\n", in rj54n1_probe()
1374 ret = rj54n1_video_probe(client, rj54n1_priv); in rj54n1_probe()
1400 static void rj54n1_remove(struct i2c_client *client) in rj54n1_remove() argument
1402 struct rj54n1 *rj54n1 = to_rj54n1(client); in rj54n1_remove()