Lines Matching refs:max96712
146 struct max96712 { struct
349 static int max96712_write_reg(struct max96712 *max96712, u8 i2c_id, in max96712_write_reg() argument
352 struct i2c_client *client = max96712->client; in max96712_write_reg()
353 u16 client_addr = max96712->i2c_addr[i2c_id]; in max96712_write_reg()
395 static int max96712_read_reg(struct max96712 *max96712, u8 i2c_id, in max96712_read_reg() argument
398 struct i2c_client *client = max96712->client; in max96712_read_reg()
399 u16 client_addr = max96712->i2c_addr[i2c_id]; in max96712_read_reg()
444 static int max96712_update_reg_bits(struct max96712 *max96712, u8 i2c_id, in max96712_update_reg_bits() argument
451 ret = max96712_read_reg(max96712, i2c_id, reg, reg_len, val_len, &value); in max96712_update_reg_bits()
457 ret = max96712_write_reg(max96712, i2c_id, reg, reg_len, val_len, value); in max96712_update_reg_bits()
464 static int max96712_write_array(struct max96712 *max96712, in max96712_write_array() argument
472 ret = max96712_update_reg_bits(max96712, regs[i].i2c_id, in max96712_write_array()
476 ret = max96712_write_reg(max96712, regs[i].i2c_id, in max96712_write_array()
487 static int max96712_check_local_chipid(struct max96712 *max96712) in max96712_check_local_chipid() argument
489 struct device *dev = &max96712->client->dev; in max96712_check_local_chipid()
493 ret = max96712_read_reg(max96712, I2C_DEV_DES, in max96712_check_local_chipid()
506 static int __maybe_unused max96712_check_remote_chipid(struct max96712 *max96712) in max96712_check_remote_chipid() argument
508 struct device *dev = &max96712->client->dev; in max96712_check_remote_chipid()
517 ret = max96712_read_reg(max96712, I2C_DEV_SER, in max96712_check_remote_chipid()
529 ret = max96712_read_reg(max96712, I2C_DEV_SER, in max96712_check_remote_chipid()
542 static u8 max96712_get_link_lock_state(struct max96712 *max96712, u8 link_mask) in max96712_get_link_lock_state() argument
544 struct device *dev = &max96712->client->dev; in max96712_get_link_lock_state()
548 link_type = max96712->link_mask & MAXIM_GMSL_TYPE_MASK; in max96712_get_link_lock_state()
553 max96712_read_reg(max96712, I2C_DEV_DES, in max96712_get_link_lock_state()
562 max96712_read_reg(max96712, I2C_DEV_DES, in max96712_get_link_lock_state()
575 max96712_read_reg(max96712, I2C_DEV_DES, in max96712_get_link_lock_state()
584 max96712_read_reg(max96712, I2C_DEV_DES, in max96712_get_link_lock_state()
597 max96712_read_reg(max96712, I2C_DEV_DES, in max96712_get_link_lock_state()
606 max96712_read_reg(max96712, I2C_DEV_DES, in max96712_get_link_lock_state()
619 max96712_read_reg(max96712, I2C_DEV_DES, in max96712_get_link_lock_state()
628 max96712_read_reg(max96712, I2C_DEV_DES, in max96712_get_link_lock_state()
641 static int max96712_check_link_lock_state(struct max96712 *max96712) in max96712_check_link_lock_state() argument
643 struct device *dev = &max96712->client->dev; in max96712_check_link_lock_state()
647 ret = max96712_check_local_chipid(max96712); in max96712_check_link_lock_state()
655 max96712_update_reg_bits(max96712, I2C_DEV_DES, in max96712_check_link_lock_state()
657 max96712_update_reg_bits(max96712, I2C_DEV_DES, in max96712_check_link_lock_state()
661 max96712_write_reg(max96712, I2C_DEV_DES, in max96712_check_link_lock_state()
666 link_type = max96712->link_mask & MAXIM_GMSL_TYPE_MASK; in max96712_check_link_lock_state()
667 max96712_write_reg(max96712, I2C_DEV_DES, in max96712_check_link_lock_state()
672 if (max96712->rx_rate == MAX96712_RX_RATE_3GBPS) { in max96712_check_link_lock_state()
674 max96712_write_reg(max96712, I2C_DEV_DES, in max96712_check_link_lock_state()
677 max96712_write_reg(max96712, I2C_DEV_DES, in max96712_check_link_lock_state()
682 max96712_write_reg(max96712, I2C_DEV_DES, in max96712_check_link_lock_state()
685 max96712_write_reg(max96712, I2C_DEV_DES, in max96712_check_link_lock_state()
692 max96712_write_reg(max96712, I2C_DEV_DES, in max96712_check_link_lock_state()
697 max96712_write_reg(max96712, I2C_DEV_DES, in max96712_check_link_lock_state()
702 max96712_write_reg(max96712, I2C_DEV_DES, in max96712_check_link_lock_state()
707 max96712_write_reg(max96712, I2C_DEV_DES, in max96712_check_link_lock_state()
713 link_mask = max96712->link_mask & MAXIM_GMSL_LOCK_MASK; in max96712_check_link_lock_state()
714 max96712_write_reg(max96712, I2C_DEV_DES, in max96712_check_link_lock_state()
719 max96712_write_reg(max96712, I2C_DEV_DES, in max96712_check_link_lock_state()
728 if (max96712_get_link_lock_state(max96712, MAXIM_GMSL_LOCK_LINK_A)) { in max96712_check_link_lock_state()
734 if (max96712_get_link_lock_state(max96712, MAXIM_GMSL_LOCK_LINK_B)) { in max96712_check_link_lock_state()
740 if (max96712_get_link_lock_state(max96712, MAXIM_GMSL_LOCK_LINK_C)) { in max96712_check_link_lock_state()
746 if (max96712_get_link_lock_state(max96712, MAXIM_GMSL_LOCK_LINK_D)) { in max96712_check_link_lock_state()
754 max96712_check_remote_chipid(max96712); in max96712_check_link_lock_state()
774 struct max96712 *max96712 = dev_id; in max96712_hot_plug_detect_irq_handler() local
775 struct device *dev = &max96712->client->dev; in max96712_hot_plug_detect_irq_handler()
778 link_mask = max96712->link_mask & MAXIM_GMSL_LOCK_MASK; in max96712_hot_plug_detect_irq_handler()
779 if (max96712->streaming) { in max96712_hot_plug_detect_irq_handler()
780 lock_state = max96712_get_link_lock_state(max96712, link_mask); in max96712_hot_plug_detect_irq_handler()
791 static int max96712_dphy_dpll_predef_set(struct max96712 *max96712, u32 link_freq_mhz) in max96712_dphy_dpll_predef_set() argument
793 struct device *dev = &max96712->client->dev; in max96712_dphy_dpll_predef_set()
798 ret = max96712_read_reg(max96712, I2C_DEV_DES, in max96712_dphy_dpll_predef_set()
819 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_dphy_dpll_predef_set()
823 ret |= max96712_update_reg_bits(max96712, I2C_DEV_DES, in max96712_dphy_dpll_predef_set()
826 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_dphy_dpll_predef_set()
834 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_dphy_dpll_predef_set()
838 ret |= max96712_update_reg_bits(max96712, I2C_DEV_DES, in max96712_dphy_dpll_predef_set()
841 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_dphy_dpll_predef_set()
849 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_dphy_dpll_predef_set()
853 ret |= max96712_update_reg_bits(max96712, I2C_DEV_DES, in max96712_dphy_dpll_predef_set()
856 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_dphy_dpll_predef_set()
864 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_dphy_dpll_predef_set()
868 ret |= max96712_update_reg_bits(max96712, I2C_DEV_DES, in max96712_dphy_dpll_predef_set()
871 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_dphy_dpll_predef_set()
884 max96712, I2C_DEV_DES, in max96712_dphy_dpll_predef_set()
896 static int max96712_auto_init_deskew(struct max96712 *max96712, u32 deskew_mask) in max96712_auto_init_deskew() argument
898 struct device *dev = &max96712->client->dev; in max96712_auto_init_deskew()
905 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_auto_init_deskew()
910 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_auto_init_deskew()
915 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_auto_init_deskew()
920 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_auto_init_deskew()
927 static int max96712_frame_sync_period(struct max96712 *max96712, u32 period) in max96712_frame_sync_period() argument
929 struct device *dev = &max96712->client->dev; in max96712_frame_sync_period()
941 ret |= max96712_write_reg(max96712, I2C_DEV_CAM, in max96712_frame_sync_period()
945 ret |= max96712_write_reg(max96712, I2C_DEV_CAM, in max96712_frame_sync_period()
951 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_frame_sync_period()
955 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_frame_sync_period()
958 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_frame_sync_period()
971 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_frame_sync_period()
975 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_frame_sync_period()
979 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_frame_sync_period()
984 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_frame_sync_period()
990 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_frame_sync_period()
997 ret |= max96712_write_reg(max96712, I2C_DEV_SER, in max96712_frame_sync_period()
1003 ret |= max96712_write_reg(max96712, I2C_DEV_DES, in max96712_frame_sync_period()
1010 static int max96712_mipi_enable(struct max96712 *max96712, bool enable) in max96712_mipi_enable() argument
1017 ret |= max96712_update_reg_bits(max96712, I2C_DEV_DES, in max96712_mipi_enable()
1021 ret |= max96712_update_reg_bits(max96712, I2C_DEV_DES, in max96712_mipi_enable()
1026 ret |= max96712_update_reg_bits(max96712, I2C_DEV_DES, in max96712_mipi_enable()
1030 ret |= max96712_update_reg_bits(max96712, I2C_DEV_DES, in max96712_mipi_enable()
1045 max96712_find_best_fit(struct max96712 *max96712, struct v4l2_subdev_format *fmt) in max96712_find_best_fit() argument
1053 for (i = 0; i < max96712->cfg_modes_num; i++) { in max96712_find_best_fit()
1054 dist = max96712_get_reso_dist(&max96712->supported_modes[i], framefmt); in max96712_find_best_fit()
1056 && (max96712->supported_modes[i].bus_fmt == framefmt->code)) { in max96712_find_best_fit()
1062 return &max96712->supported_modes[cur_best_fit]; in max96712_find_best_fit()
1069 struct max96712 *max96712 = v4l2_get_subdevdata(sd); in max96712_set_fmt() local
1074 mutex_lock(&max96712->mutex); in max96712_set_fmt()
1076 mode = max96712_find_best_fit(max96712, fmt); in max96712_set_fmt()
1086 mutex_unlock(&max96712->mutex); in max96712_set_fmt()
1090 if (max96712->streaming) { in max96712_set_fmt()
1091 mutex_unlock(&max96712->mutex); in max96712_set_fmt()
1095 max96712->cur_mode = mode; in max96712_set_fmt()
1097 __v4l2_ctrl_s_ctrl(max96712->link_freq, mode->link_freq_idx); in max96712_set_fmt()
1099 data_lanes = max96712->bus_cfg.bus.mipi_csi2.num_data_lanes; in max96712_set_fmt()
1101 __v4l2_ctrl_s_ctrl_int64(max96712->pixel_rate, pixel_rate); in max96712_set_fmt()
1103 dev_info(&max96712->client->dev, "mipi_freq_idx = %d, mipi_link_freq = %lld\n", in max96712_set_fmt()
1105 dev_info(&max96712->client->dev, "pixel_rate = %lld, bpp = %d\n", in max96712_set_fmt()
1109 mutex_unlock(&max96712->mutex); in max96712_set_fmt()
1118 struct max96712 *max96712 = v4l2_get_subdevdata(sd); in max96712_get_fmt() local
1119 const struct max96712_mode *mode = max96712->cur_mode; in max96712_get_fmt()
1121 mutex_lock(&max96712->mutex); in max96712_get_fmt()
1126 mutex_unlock(&max96712->mutex); in max96712_get_fmt()
1139 mutex_unlock(&max96712->mutex); in max96712_get_fmt()
1148 struct max96712 *max96712 = v4l2_get_subdevdata(sd); in max96712_enum_mbus_code() local
1149 const struct max96712_mode *mode = max96712->cur_mode; in max96712_enum_mbus_code()
1162 struct max96712 *max96712 = v4l2_get_subdevdata(sd); in max96712_enum_frame_sizes() local
1164 if (fse->index >= max96712->cfg_modes_num) in max96712_enum_frame_sizes()
1167 if (fse->code != max96712->supported_modes[fse->index].bus_fmt) in max96712_enum_frame_sizes()
1170 fse->min_width = max96712->supported_modes[fse->index].width; in max96712_enum_frame_sizes()
1171 fse->max_width = max96712->supported_modes[fse->index].width; in max96712_enum_frame_sizes()
1172 fse->max_height = max96712->supported_modes[fse->index].height; in max96712_enum_frame_sizes()
1173 fse->min_height = max96712->supported_modes[fse->index].height; in max96712_enum_frame_sizes()
1181 struct max96712 *max96712 = v4l2_get_subdevdata(sd); in max96712_g_frame_interval() local
1182 const struct max96712_mode *mode = max96712->cur_mode; in max96712_g_frame_interval()
1184 mutex_lock(&max96712->mutex); in max96712_g_frame_interval()
1186 mutex_unlock(&max96712->mutex); in max96712_g_frame_interval()
1191 static void max96712_get_module_inf(struct max96712 *max96712, in max96712_get_module_inf() argument
1196 strscpy(inf->base.module, max96712->module_name, in max96712_get_module_inf()
1198 strscpy(inf->base.lens, max96712->len_name, sizeof(inf->base.lens)); in max96712_get_module_inf()
1202 max96712_get_vicap_rst_inf(struct max96712 *max96712, in max96712_get_vicap_rst_inf() argument
1205 struct i2c_client *client = max96712->client; in max96712_get_vicap_rst_inf()
1207 rst_info->is_reset = max96712->hot_plug; in max96712_get_vicap_rst_inf()
1208 max96712->hot_plug = false; in max96712_get_vicap_rst_inf()
1215 max96712_set_vicap_rst_inf(struct max96712 *max96712, in max96712_set_vicap_rst_inf() argument
1218 max96712->is_reset = rst_info.is_reset; in max96712_set_vicap_rst_inf()
1223 struct max96712 *max96712 = v4l2_get_subdevdata(sd); in max96712_ioctl() local
1230 max96712_get_module_inf(max96712, (struct rkmodule_inf *)arg); in max96712_ioctl()
1236 ret = max96712_mipi_enable(max96712, true); in max96712_ioctl()
1238 ret = max96712_mipi_enable(max96712, false); in max96712_ioctl()
1242 max96712, (struct rkmodule_vicap_reset_info *)arg); in max96712_ioctl()
1246 max96712, *(struct rkmodule_vicap_reset_info *)arg); in max96712_ioctl()
1254 dev_dbg(&max96712->client->dev, "sensor set dphy param\n"); in max96712_ioctl()
1260 dev_dbg(&max96712->client->dev, "sensor get dphy param\n"); in max96712_ioctl()
1403 static int __max96712_start_stream(struct max96712 *max96712) in __max96712_start_stream() argument
1408 ret = max96712_check_link_lock_state(max96712); in __max96712_start_stream()
1412 if (max96712->hot_plug_irq > 0) in __max96712_start_stream()
1413 enable_irq(max96712->hot_plug_irq); in __max96712_start_stream()
1415 ret = max96712_write_array(max96712, in __max96712_start_stream()
1416 max96712->cur_mode->reg_list); in __max96712_start_stream()
1420 link_freq_idx = max96712->cur_mode->link_freq_idx; in __max96712_start_stream()
1422 ret = max96712_dphy_dpll_predef_set(max96712, link_freq_mhz); in __max96712_start_stream()
1426 if (max96712->auto_init_deskew_mask != 0) { in __max96712_start_stream()
1427 ret = max96712_auto_init_deskew(max96712, in __max96712_start_stream()
1428 max96712->auto_init_deskew_mask); in __max96712_start_stream()
1433 if (max96712->frame_sync_period != 0) { in __max96712_start_stream()
1434 ret = max96712_frame_sync_period(max96712, in __max96712_start_stream()
1435 max96712->frame_sync_period); in __max96712_start_stream()
1441 mutex_unlock(&max96712->mutex); in __max96712_start_stream()
1442 ret = v4l2_ctrl_handler_setup(&max96712->ctrl_handler); in __max96712_start_stream()
1443 mutex_lock(&max96712->mutex); in __max96712_start_stream()
1447 return max96712_mipi_enable(max96712, true); in __max96712_start_stream()
1451 static int __max96712_stop_stream(struct max96712 *max96712) in __max96712_stop_stream() argument
1453 if (max96712->hot_plug_irq > 0) in __max96712_stop_stream()
1454 disable_irq(max96712->hot_plug_irq); in __max96712_stop_stream()
1456 return max96712_mipi_enable(max96712, false); in __max96712_stop_stream()
1461 struct max96712 *max96712 = v4l2_get_subdevdata(sd); in max96712_s_stream() local
1462 struct i2c_client *client = max96712->client; in max96712_s_stream()
1466 max96712->cur_mode->width, max96712->cur_mode->height, in max96712_s_stream()
1467 DIV_ROUND_CLOSEST(max96712->cur_mode->max_fps.denominator, in max96712_s_stream()
1468 max96712->cur_mode->max_fps.numerator)); in max96712_s_stream()
1470 mutex_lock(&max96712->mutex); in max96712_s_stream()
1472 if (on == max96712->streaming) in max96712_s_stream()
1482 ret = __max96712_start_stream(max96712); in max96712_s_stream()
1489 __max96712_stop_stream(max96712); in max96712_s_stream()
1493 max96712->streaming = on; in max96712_s_stream()
1496 mutex_unlock(&max96712->mutex); in max96712_s_stream()
1503 struct max96712 *max96712 = v4l2_get_subdevdata(sd); in max96712_s_power() local
1504 struct i2c_client *client = max96712->client; in max96712_s_power()
1507 mutex_lock(&max96712->mutex); in max96712_s_power()
1510 if (max96712->power_on == !!on) in max96712_s_power()
1520 max96712->power_on = true; in max96712_s_power()
1523 max96712->power_on = false; in max96712_s_power()
1527 mutex_unlock(&max96712->mutex); in max96712_s_power()
1538 static int __max96712_power_on(struct max96712 *max96712) in __max96712_power_on() argument
1542 struct device *dev = &max96712->client->dev; in __max96712_power_on()
1544 if (!IS_ERR(max96712->power_gpio)) { in __max96712_power_on()
1545 gpiod_set_value_cansleep(max96712->power_gpio, 1); in __max96712_power_on()
1549 if (!IS_ERR(max96712->pocen_gpio)) { in __max96712_power_on()
1550 gpiod_set_value_cansleep(max96712->pocen_gpio, 1); in __max96712_power_on()
1554 if (!IS_ERR_OR_NULL(max96712->pins_default)) { in __max96712_power_on()
1555 ret = pinctrl_select_state(max96712->pinctrl, in __max96712_power_on()
1556 max96712->pins_default); in __max96712_power_on()
1561 if (!IS_ERR(max96712->reset_gpio)) in __max96712_power_on()
1562 gpiod_set_value_cansleep(max96712->reset_gpio, 0); in __max96712_power_on()
1564 ret = regulator_bulk_enable(MAX96712_NUM_SUPPLIES, max96712->supplies); in __max96712_power_on()
1569 if (!IS_ERR(max96712->reset_gpio)) { in __max96712_power_on()
1570 gpiod_set_value_cansleep(max96712->reset_gpio, 1); in __max96712_power_on()
1574 if (!IS_ERR(max96712->pwdn_gpio)) in __max96712_power_on()
1575 gpiod_set_value_cansleep(max96712->pwdn_gpio, 1); in __max96712_power_on()
1584 clk_disable_unprepare(max96712->xvclk); in __max96712_power_on()
1589 static void __max96712_power_off(struct max96712 *max96712) in __max96712_power_off() argument
1592 struct device *dev = &max96712->client->dev; in __max96712_power_off()
1594 if (!IS_ERR(max96712->pwdn_gpio)) in __max96712_power_off()
1595 gpiod_set_value_cansleep(max96712->pwdn_gpio, 0); in __max96712_power_off()
1596 clk_disable_unprepare(max96712->xvclk); in __max96712_power_off()
1598 if (!IS_ERR(max96712->reset_gpio)) in __max96712_power_off()
1599 gpiod_set_value_cansleep(max96712->reset_gpio, 0); in __max96712_power_off()
1601 if (!IS_ERR_OR_NULL(max96712->pins_sleep)) { in __max96712_power_off()
1602 ret = pinctrl_select_state(max96712->pinctrl, in __max96712_power_off()
1603 max96712->pins_sleep); in __max96712_power_off()
1608 regulator_bulk_disable(MAX96712_NUM_SUPPLIES, max96712->supplies); in __max96712_power_off()
1610 if (!IS_ERR(max96712->pocen_gpio)) in __max96712_power_off()
1611 gpiod_set_value_cansleep(max96712->pocen_gpio, 0); in __max96712_power_off()
1613 if (!IS_ERR(max96712->power_gpio)) in __max96712_power_off()
1614 gpiod_set_value_cansleep(max96712->power_gpio, 0); in __max96712_power_off()
1621 struct max96712 *max96712 = v4l2_get_subdevdata(sd); in max96712_runtime_resume() local
1623 return __max96712_power_on(max96712); in max96712_runtime_resume()
1630 struct max96712 *max96712 = v4l2_get_subdevdata(sd); in max96712_runtime_suspend() local
1632 __max96712_power_off(max96712); in max96712_runtime_suspend()
1640 struct max96712 *max96712 = v4l2_get_subdevdata(sd); in max96712_open() local
1643 const struct max96712_mode *def_mode = &max96712->supported_modes[0]; in max96712_open()
1645 mutex_lock(&max96712->mutex); in max96712_open()
1652 mutex_unlock(&max96712->mutex); in max96712_open()
1664 struct max96712 *max96712 = v4l2_get_subdevdata(sd); in max96712_enum_frame_interval() local
1666 if (fie->index >= max96712->cfg_modes_num) in max96712_enum_frame_interval()
1669 fie->code = max96712->supported_modes[fie->index].bus_fmt; in max96712_enum_frame_interval()
1670 fie->width = max96712->supported_modes[fie->index].width; in max96712_enum_frame_interval()
1671 fie->height = max96712->supported_modes[fie->index].height; in max96712_enum_frame_interval()
1672 fie->interval = max96712->supported_modes[fie->index].max_fps; in max96712_enum_frame_interval()
1680 struct max96712 *max96712 = v4l2_get_subdevdata(sd); in max96712_g_mbus_config() local
1682 u8 data_lanes = max96712->bus_cfg.bus.mipi_csi2.num_data_lanes; in max96712_g_mbus_config()
1712 struct max96712 *max96712 = v4l2_get_subdevdata(sd); in max96712_get_selection() local
1716 sel->r.width = max96712->cur_mode->width; in max96712_get_selection()
1718 sel->r.height = max96712->cur_mode->height; in max96712_get_selection()
1763 static int max96712_initialize_controls(struct max96712 *max96712) in max96712_initialize_controls() argument
1771 handler = &max96712->ctrl_handler; in max96712_initialize_controls()
1773 mode = max96712->cur_mode; in max96712_initialize_controls()
1777 handler->lock = &max96712->mutex; in max96712_initialize_controls()
1779 max96712->link_freq = v4l2_ctrl_new_int_menu(handler, NULL, in max96712_initialize_controls()
1783 __v4l2_ctrl_s_ctrl(max96712->link_freq, mode->link_freq_idx); in max96712_initialize_controls()
1784 dev_info(&max96712->client->dev, "mipi_freq_idx = %d, mipi_link_freq = %lld\n", in max96712_initialize_controls()
1788 data_lanes = max96712->bus_cfg.bus.mipi_csi2.num_data_lanes; in max96712_initialize_controls()
1790 max96712->pixel_rate = in max96712_initialize_controls()
1793 dev_info(&max96712->client->dev, "pixel_rate = %lld, bpp = %d\n", in max96712_initialize_controls()
1798 dev_err(&max96712->client->dev, "Failed to init controls(%d)\n", in max96712_initialize_controls()
1803 max96712->subdev.ctrl_handler = handler; in max96712_initialize_controls()
1813 static int max96712_configure_regulators(struct max96712 *max96712) in max96712_configure_regulators() argument
1818 max96712->supplies[i].supply = max96712_supply_names[i]; in max96712_configure_regulators()
1820 return devm_regulator_bulk_get(&max96712->client->dev, in max96712_configure_regulators()
1822 max96712->supplies); in max96712_configure_regulators()
1825 static int max96712_parse_dt(struct max96712 *max96712) in max96712_parse_dt() argument
1827 struct device *dev = &max96712->client->dev; in max96712_parse_dt()
1829 u8 mipi_data_lanes = max96712->bus_cfg.bus.mipi_csi2.num_data_lanes; in max96712_parse_dt()
1836 max96712->i2c_addr[I2C_DEV_SER] = SER_I2C_ADDR; in max96712_parse_dt()
1839 max96712->i2c_addr[I2C_DEV_SER] = value; in max96712_parse_dt()
1841 dev_info(dev, "serializer i2c address: 0x%02x\n", max96712->i2c_addr[I2C_DEV_SER]); in max96712_parse_dt()
1845 &max96712->rx_rate); in max96712_parse_dt()
1847 max96712->rx_rate = MAX96712_RX_RATE_6GBPS; in max96712_parse_dt()
1849 dev_info(dev, "link-rx-rate property: %d\n", max96712->rx_rate); in max96712_parse_dt()
1850 dev_info(dev, "serdes link receiver rate: %d\n", max96712->rx_rate); in max96712_parse_dt()
1859 &max96712->link_mask); in max96712_parse_dt()
1863 max96712->link_mask = 0xFF; /* Link A/B/C/D: GMSL2 and enable */ in max96712_parse_dt()
1865 max96712->link_mask = 0x33; /* Link A/B: GMSL2 and enable */ in max96712_parse_dt()
1867 dev_info(dev, "link-mask property: 0x%08x\n", max96712->link_mask); in max96712_parse_dt()
1869 dev_info(dev, "serdes link mask: 0x%02x\n", max96712->link_mask); in max96712_parse_dt()
1873 &max96712->auto_init_deskew_mask); in max96712_parse_dt()
1875 max96712->auto_init_deskew_mask = 0x0F; // 0x0F: default enable all in max96712_parse_dt()
1876 dev_info(dev, "auto init deskew mask: 0x%02x\n", max96712->auto_init_deskew_mask); in max96712_parse_dt()
1880 &max96712->frame_sync_period); in max96712_parse_dt()
1882 max96712->frame_sync_period = 0; // 0: disable (default) in max96712_parse_dt()
1883 dev_info(dev, "frame sync period: %d\n", max96712->frame_sync_period); in max96712_parse_dt()
1893 struct max96712 *max96712; in max96712_probe() local
1903 max96712 = devm_kzalloc(dev, sizeof(*max96712), GFP_KERNEL); in max96712_probe()
1904 if (!max96712) in max96712_probe()
1908 &max96712->module_index); in max96712_probe()
1910 &max96712->module_facing); in max96712_probe()
1912 &max96712->module_name); in max96712_probe()
1914 &max96712->len_name); in max96712_probe()
1920 max96712->regmap = devm_regmap_init_i2c(client, &max96712_regmap_config); in max96712_probe()
1921 if (IS_ERR(max96712->regmap)) { in max96712_probe()
1923 return PTR_ERR(max96712->regmap); in max96712_probe()
1926 max96712->client = client; in max96712_probe()
1927 i2c_set_clientdata(client, max96712); in max96712_probe()
1930 max96712->i2c_addr[I2C_DEV_DES] = client->addr; in max96712_probe()
1931 max96712->i2c_addr[I2C_DEV_SER] = SER_I2C_ADDR; in max96712_probe()
1932 max96712->i2c_addr[I2C_DEV_CAM] = CAM_I2C_ADDR; in max96712_probe()
1941 &max96712->bus_cfg); in max96712_probe()
1946 mipi_data_lanes = max96712->bus_cfg.bus.mipi_csi2.num_data_lanes; in max96712_probe()
1950 max96712->supported_modes = supported_modes_4lane; in max96712_probe()
1951 max96712->cfg_modes_num = ARRAY_SIZE(supported_modes_4lane); in max96712_probe()
1956 max96712->cur_mode = &max96712->supported_modes[0]; in max96712_probe()
1958 max96712->power_gpio = devm_gpiod_get(dev, "power", GPIOD_OUT_LOW); in max96712_probe()
1959 if (IS_ERR(max96712->power_gpio)) in max96712_probe()
1962 max96712->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in max96712_probe()
1963 if (IS_ERR(max96712->reset_gpio)) in max96712_probe()
1966 max96712->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in max96712_probe()
1967 if (IS_ERR(max96712->pwdn_gpio)) in max96712_probe()
1970 max96712->pocen_gpio = devm_gpiod_get(dev, "pocen", GPIOD_OUT_LOW); in max96712_probe()
1971 if (IS_ERR(max96712->pocen_gpio)) in max96712_probe()
1974 max96712->lock_gpio = devm_gpiod_get(dev, "lock", GPIOD_IN); in max96712_probe()
1975 if (IS_ERR(max96712->lock_gpio)) in max96712_probe()
1978 ret = max96712_configure_regulators(max96712); in max96712_probe()
1984 max96712->pinctrl = devm_pinctrl_get(dev); in max96712_probe()
1985 if (!IS_ERR(max96712->pinctrl)) { in max96712_probe()
1986 max96712->pins_default = pinctrl_lookup_state( in max96712_probe()
1987 max96712->pinctrl, OF_CAMERA_PINCTRL_STATE_DEFAULT); in max96712_probe()
1988 if (IS_ERR(max96712->pins_default)) in max96712_probe()
1991 max96712->pins_sleep = pinctrl_lookup_state( in max96712_probe()
1992 max96712->pinctrl, OF_CAMERA_PINCTRL_STATE_SLEEP); in max96712_probe()
1993 if (IS_ERR(max96712->pins_sleep)) in max96712_probe()
1997 max96712_parse_dt(max96712); in max96712_probe()
1999 mutex_init(&max96712->mutex); in max96712_probe()
2001 sd = &max96712->subdev; in max96712_probe()
2003 ret = max96712_initialize_controls(max96712); in max96712_probe()
2007 ret = __max96712_power_on(max96712); in max96712_probe()
2011 ret = max96712_check_local_chipid(max96712); in max96712_probe()
2020 max96712->pad.flags = MEDIA_PAD_FL_SOURCE; in max96712_probe()
2022 ret = media_entity_pads_init(&sd->entity, 1, &max96712->pad); in max96712_probe()
2028 if (strcmp(max96712->module_facing, "back") == 0) in max96712_probe()
2033 v4l2_set_subdevdata(sd, max96712); in max96712_probe()
2036 max96712->module_index, facing, MAX96712_NAME, in max96712_probe()
2044 if (!IS_ERR(max96712->lock_gpio)) { in max96712_probe()
2045 max96712->hot_plug_irq = gpiod_to_irq(max96712->lock_gpio); in max96712_probe()
2046 if (max96712->hot_plug_irq < 0) { in max96712_probe()
2050 max96712->hot_plug_irq, in max96712_probe()
2055 max96712); in max96712_probe()
2058 max96712->hot_plug_irq = -1; in max96712_probe()
2060 disable_irq(max96712->hot_plug_irq); in max96712_probe()
2076 __max96712_power_off(max96712); in max96712_probe()
2078 v4l2_ctrl_handler_free(&max96712->ctrl_handler); in max96712_probe()
2080 mutex_destroy(&max96712->mutex); in max96712_probe()
2088 struct max96712 *max96712 = v4l2_get_subdevdata(sd); in max96712_remove() local
2094 v4l2_ctrl_handler_free(&max96712->ctrl_handler); in max96712_remove()
2095 mutex_destroy(&max96712->mutex); in max96712_remove()
2099 __max96712_power_off(max96712); in max96712_remove()