Lines Matching refs:max96722

134 struct max96722 {  struct
365 static int max96722_write_reg(struct max96722 *max96722, u8 i2c_id, in max96722_write_reg() argument
368 struct i2c_client *client = max96722->client; in max96722_write_reg()
369 u16 client_addr = max96722->i2c_addr[i2c_id]; in max96722_write_reg()
411 static int max96722_read_reg(struct max96722 *max96722, u8 i2c_id, in max96722_read_reg() argument
414 struct i2c_client *client = max96722->client; in max96722_read_reg()
415 u16 client_addr = max96722->i2c_addr[i2c_id]; in max96722_read_reg()
460 static int max96722_update_reg_bits(struct max96722 *max96722, u8 i2c_id, in max96722_update_reg_bits() argument
467 ret = max96722_read_reg(max96722, i2c_id, reg, reg_len, val_len, &value); in max96722_update_reg_bits()
473 ret = max96722_write_reg(max96722, i2c_id, reg, reg_len, val_len, value); in max96722_update_reg_bits()
480 static int max96722_write_array(struct max96722 *max96722, in max96722_write_array() argument
488 ret = max96722_update_reg_bits(max96722, regs[i].i2c_id, in max96722_write_array()
492 ret = max96722_write_reg(max96722, regs[i].i2c_id, in max96722_write_array()
503 static int max96722_check_local_chipid(struct max96722 *max96722) in max96722_check_local_chipid() argument
505 struct device *dev = &max96722->client->dev; in max96722_check_local_chipid()
509 ret = max96722_read_reg(max96722, I2C_DEV_DES, in max96722_check_local_chipid()
522 static int __maybe_unused max96722_check_remote_chipid(struct max96722 *max96722) in max96722_check_remote_chipid() argument
524 struct device *dev = &max96722->client->dev; in max96722_check_remote_chipid()
533 ret = max96722_read_reg(max96722, I2C_DEV_SER, in max96722_check_remote_chipid()
545 ret = max96722_read_reg(max96722, I2C_DEV_SER, in max96722_check_remote_chipid()
557 ret = max96722_read_reg(max96722, I2C_DEV_SER, in max96722_check_remote_chipid()
570 static u8 max96722_get_link_lock_state(struct max96722 *max96722, u8 link_mask) in max96722_get_link_lock_state() argument
572 struct device *dev = &max96722->client->dev; in max96722_get_link_lock_state()
576 link_type = max96722->link_mask & MAXIM_GMSL_TYPE_MASK; in max96722_get_link_lock_state()
581 max96722_read_reg(max96722, I2C_DEV_DES, in max96722_get_link_lock_state()
590 max96722_read_reg(max96722, I2C_DEV_DES, in max96722_get_link_lock_state()
603 max96722_read_reg(max96722, I2C_DEV_DES, in max96722_get_link_lock_state()
612 max96722_read_reg(max96722, I2C_DEV_DES, in max96722_get_link_lock_state()
625 max96722_read_reg(max96722, I2C_DEV_DES, in max96722_get_link_lock_state()
634 max96722_read_reg(max96722, I2C_DEV_DES, in max96722_get_link_lock_state()
647 max96722_read_reg(max96722, I2C_DEV_DES, in max96722_get_link_lock_state()
656 max96722_read_reg(max96722, I2C_DEV_DES, in max96722_get_link_lock_state()
669 static int max96722_check_link_lock_state(struct max96722 *max96722) in max96722_check_link_lock_state() argument
671 struct device *dev = &max96722->client->dev; in max96722_check_link_lock_state()
675 ret = max96722_check_local_chipid(max96722); in max96722_check_link_lock_state()
683 max96722_update_reg_bits(max96722, I2C_DEV_DES, in max96722_check_link_lock_state()
685 max96722_update_reg_bits(max96722, I2C_DEV_DES, in max96722_check_link_lock_state()
689 max96722_write_reg(max96722, I2C_DEV_DES, in max96722_check_link_lock_state()
694 link_type = max96722->link_mask & MAXIM_GMSL_TYPE_MASK; in max96722_check_link_lock_state()
695 max96722_write_reg(max96722, I2C_DEV_DES, in max96722_check_link_lock_state()
701 max96722_write_reg(max96722, I2C_DEV_DES, in max96722_check_link_lock_state()
704 max96722_write_reg(max96722, I2C_DEV_DES, in max96722_check_link_lock_state()
710 max96722_write_reg(max96722, I2C_DEV_DES, in max96722_check_link_lock_state()
715 max96722_write_reg(max96722, I2C_DEV_DES, in max96722_check_link_lock_state()
720 max96722_write_reg(max96722, I2C_DEV_DES, in max96722_check_link_lock_state()
725 max96722_write_reg(max96722, I2C_DEV_DES, in max96722_check_link_lock_state()
731 link_mask = max96722->link_mask & MAXIM_GMSL_LOCK_MASK; in max96722_check_link_lock_state()
732 max96722_write_reg(max96722, I2C_DEV_DES, in max96722_check_link_lock_state()
737 max96722_write_reg(max96722, I2C_DEV_DES, in max96722_check_link_lock_state()
746 if (max96722_get_link_lock_state(max96722, MAXIM_GMSL_LOCK_LINK_A)) { in max96722_check_link_lock_state()
752 if (max96722_get_link_lock_state(max96722, MAXIM_GMSL_LOCK_LINK_B)) { in max96722_check_link_lock_state()
758 if (max96722_get_link_lock_state(max96722, MAXIM_GMSL_LOCK_LINK_C)) { in max96722_check_link_lock_state()
764 if (max96722_get_link_lock_state(max96722, MAXIM_GMSL_LOCK_LINK_D)) { in max96722_check_link_lock_state()
772 max96722_check_remote_chipid(max96722); in max96722_check_link_lock_state()
792 struct max96722 *max96722 = dev_id; in max96722_hot_plug_detect_irq_handler() local
793 struct device *dev = &max96722->client->dev; in max96722_hot_plug_detect_irq_handler()
796 link_mask = max96722->link_mask & MAXIM_GMSL_LOCK_MASK; in max96722_hot_plug_detect_irq_handler()
797 if (max96722->streaming) { in max96722_hot_plug_detect_irq_handler()
798 lock_state = max96722_get_link_lock_state(max96722, link_mask); in max96722_hot_plug_detect_irq_handler()
809 static int max96722_dphy_dpll_predef_set(struct max96722 *max96722, u32 link_freq_mhz) in max96722_dphy_dpll_predef_set() argument
811 struct device *dev = &max96722->client->dev; in max96722_dphy_dpll_predef_set()
816 ret = max96722_read_reg(max96722, I2C_DEV_DES, in max96722_dphy_dpll_predef_set()
837 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_dphy_dpll_predef_set()
841 ret |= max96722_update_reg_bits(max96722, I2C_DEV_DES, in max96722_dphy_dpll_predef_set()
844 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_dphy_dpll_predef_set()
852 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_dphy_dpll_predef_set()
856 ret |= max96722_update_reg_bits(max96722, I2C_DEV_DES, in max96722_dphy_dpll_predef_set()
859 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_dphy_dpll_predef_set()
867 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_dphy_dpll_predef_set()
871 ret |= max96722_update_reg_bits(max96722, I2C_DEV_DES, in max96722_dphy_dpll_predef_set()
874 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_dphy_dpll_predef_set()
882 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_dphy_dpll_predef_set()
886 ret |= max96722_update_reg_bits(max96722, I2C_DEV_DES, in max96722_dphy_dpll_predef_set()
889 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_dphy_dpll_predef_set()
902 max96722, I2C_DEV_DES, in max96722_dphy_dpll_predef_set()
914 static int max96722_auto_init_deskew(struct max96722 *max96722, u32 deskew_mask) in max96722_auto_init_deskew() argument
916 struct device *dev = &max96722->client->dev; in max96722_auto_init_deskew()
923 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_auto_init_deskew()
928 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_auto_init_deskew()
933 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_auto_init_deskew()
938 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_auto_init_deskew()
945 static int max96722_frame_sync_period(struct max96722 *max96722, u32 period) in max96722_frame_sync_period() argument
947 struct device *dev = &max96722->client->dev; in max96722_frame_sync_period()
962 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_frame_sync_period()
966 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_frame_sync_period()
969 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_frame_sync_period()
982 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_frame_sync_period()
986 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_frame_sync_period()
990 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_frame_sync_period()
995 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_frame_sync_period()
1001 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_frame_sync_period()
1008 ret |= max96722_write_reg(max96722, I2C_DEV_SER, in max96722_frame_sync_period()
1014 ret |= max96722_write_reg(max96722, I2C_DEV_DES, in max96722_frame_sync_period()
1021 static int max96722_mipi_enable(struct max96722 *max96722, bool enable) in max96722_mipi_enable() argument
1028 ret |= max96722_update_reg_bits(max96722, I2C_DEV_DES, in max96722_mipi_enable()
1032 ret |= max96722_update_reg_bits(max96722, I2C_DEV_DES, in max96722_mipi_enable()
1037 ret |= max96722_update_reg_bits(max96722, I2C_DEV_DES, in max96722_mipi_enable()
1041 ret |= max96722_update_reg_bits(max96722, I2C_DEV_DES, in max96722_mipi_enable()
1056 max96722_find_best_fit(struct max96722 *max96722, struct v4l2_subdev_format *fmt) in max96722_find_best_fit() argument
1064 for (i = 0; i < max96722->cfg_modes_num; i++) { in max96722_find_best_fit()
1065 dist = max96722_get_reso_dist(&max96722->supported_modes[i], framefmt); in max96722_find_best_fit()
1067 && (max96722->supported_modes[i].bus_fmt == framefmt->code)) { in max96722_find_best_fit()
1073 return &max96722->supported_modes[cur_best_fit]; in max96722_find_best_fit()
1080 struct max96722 *max96722 = v4l2_get_subdevdata(sd); in max96722_set_fmt() local
1085 mutex_lock(&max96722->mutex); in max96722_set_fmt()
1087 mode = max96722_find_best_fit(max96722, fmt); in max96722_set_fmt()
1097 mutex_unlock(&max96722->mutex); in max96722_set_fmt()
1101 if (max96722->streaming) { in max96722_set_fmt()
1102 mutex_unlock(&max96722->mutex); in max96722_set_fmt()
1106 max96722->cur_mode = mode; in max96722_set_fmt()
1108 __v4l2_ctrl_s_ctrl(max96722->link_freq, mode->link_freq_idx); in max96722_set_fmt()
1110 data_lanes = max96722->bus_cfg.bus.mipi_csi2.num_data_lanes; in max96722_set_fmt()
1112 __v4l2_ctrl_s_ctrl_int64(max96722->pixel_rate, pixel_rate); in max96722_set_fmt()
1114 dev_info(&max96722->client->dev, "mipi_freq_idx = %d, mipi_link_freq = %lld\n", in max96722_set_fmt()
1116 dev_info(&max96722->client->dev, "pixel_rate = %lld, bpp = %d\n", in max96722_set_fmt()
1120 mutex_unlock(&max96722->mutex); in max96722_set_fmt()
1129 struct max96722 *max96722 = v4l2_get_subdevdata(sd); in max96722_get_fmt() local
1130 const struct max96722_mode *mode = max96722->cur_mode; in max96722_get_fmt()
1132 mutex_lock(&max96722->mutex); in max96722_get_fmt()
1137 mutex_unlock(&max96722->mutex); in max96722_get_fmt()
1150 mutex_unlock(&max96722->mutex); in max96722_get_fmt()
1159 struct max96722 *max96722 = v4l2_get_subdevdata(sd); in max96722_enum_mbus_code() local
1160 const struct max96722_mode *mode = max96722->cur_mode; in max96722_enum_mbus_code()
1173 struct max96722 *max96722 = v4l2_get_subdevdata(sd); in max96722_enum_frame_sizes() local
1175 if (fse->index >= max96722->cfg_modes_num) in max96722_enum_frame_sizes()
1178 if (fse->code != max96722->supported_modes[fse->index].bus_fmt) in max96722_enum_frame_sizes()
1181 fse->min_width = max96722->supported_modes[fse->index].width; in max96722_enum_frame_sizes()
1182 fse->max_width = max96722->supported_modes[fse->index].width; in max96722_enum_frame_sizes()
1183 fse->max_height = max96722->supported_modes[fse->index].height; in max96722_enum_frame_sizes()
1184 fse->min_height = max96722->supported_modes[fse->index].height; in max96722_enum_frame_sizes()
1192 struct max96722 *max96722 = v4l2_get_subdevdata(sd); in max96722_g_frame_interval() local
1193 const struct max96722_mode *mode = max96722->cur_mode; in max96722_g_frame_interval()
1195 mutex_lock(&max96722->mutex); in max96722_g_frame_interval()
1197 mutex_unlock(&max96722->mutex); in max96722_g_frame_interval()
1202 static void max96722_get_module_inf(struct max96722 *max96722, in max96722_get_module_inf() argument
1207 strscpy(inf->base.module, max96722->module_name, in max96722_get_module_inf()
1209 strscpy(inf->base.lens, max96722->len_name, sizeof(inf->base.lens)); in max96722_get_module_inf()
1213 max96722_get_vicap_rst_inf(struct max96722 *max96722, in max96722_get_vicap_rst_inf() argument
1216 struct i2c_client *client = max96722->client; in max96722_get_vicap_rst_inf()
1218 rst_info->is_reset = max96722->hot_plug; in max96722_get_vicap_rst_inf()
1219 max96722->hot_plug = false; in max96722_get_vicap_rst_inf()
1226 max96722_set_vicap_rst_inf(struct max96722 *max96722, in max96722_set_vicap_rst_inf() argument
1229 max96722->is_reset = rst_info.is_reset; in max96722_set_vicap_rst_inf()
1234 struct max96722 *max96722 = v4l2_get_subdevdata(sd); in max96722_ioctl() local
1241 max96722_get_module_inf(max96722, (struct rkmodule_inf *)arg); in max96722_ioctl()
1247 ret = max96722_mipi_enable(max96722, true); in max96722_ioctl()
1249 ret = max96722_mipi_enable(max96722, false); in max96722_ioctl()
1253 max96722, (struct rkmodule_vicap_reset_info *)arg); in max96722_ioctl()
1257 max96722, *(struct rkmodule_vicap_reset_info *)arg); in max96722_ioctl()
1265 dev_dbg(&max96722->client->dev, "sensor set dphy param\n"); in max96722_ioctl()
1271 dev_dbg(&max96722->client->dev, "sensor get dphy param\n"); in max96722_ioctl()
1414 static int __max96722_start_stream(struct max96722 *max96722) in __max96722_start_stream() argument
1419 ret = max96722_check_link_lock_state(max96722); in __max96722_start_stream()
1423 if (max96722->hot_plug_irq > 0) in __max96722_start_stream()
1424 enable_irq(max96722->hot_plug_irq); in __max96722_start_stream()
1426 ret = max96722_write_array(max96722, in __max96722_start_stream()
1427 max96722->cur_mode->reg_list); in __max96722_start_stream()
1431 link_freq_idx = max96722->cur_mode->link_freq_idx; in __max96722_start_stream()
1433 ret = max96722_dphy_dpll_predef_set(max96722, link_freq_mhz); in __max96722_start_stream()
1437 if (max96722->auto_init_deskew_mask != 0) { in __max96722_start_stream()
1438 ret = max96722_auto_init_deskew(max96722, in __max96722_start_stream()
1439 max96722->auto_init_deskew_mask); in __max96722_start_stream()
1444 if (max96722->frame_sync_period != 0) { in __max96722_start_stream()
1445 ret = max96722_frame_sync_period(max96722, in __max96722_start_stream()
1446 max96722->frame_sync_period); in __max96722_start_stream()
1452 mutex_unlock(&max96722->mutex); in __max96722_start_stream()
1453 ret = v4l2_ctrl_handler_setup(&max96722->ctrl_handler); in __max96722_start_stream()
1454 mutex_lock(&max96722->mutex); in __max96722_start_stream()
1458 return max96722_mipi_enable(max96722, true); in __max96722_start_stream()
1462 static int __max96722_stop_stream(struct max96722 *max96722) in __max96722_stop_stream() argument
1464 if (max96722->hot_plug_irq > 0) in __max96722_stop_stream()
1465 disable_irq(max96722->hot_plug_irq); in __max96722_stop_stream()
1467 return max96722_mipi_enable(max96722, false); in __max96722_stop_stream()
1472 struct max96722 *max96722 = v4l2_get_subdevdata(sd); in max96722_s_stream() local
1473 struct i2c_client *client = max96722->client; in max96722_s_stream()
1477 max96722->cur_mode->width, max96722->cur_mode->height, in max96722_s_stream()
1478 DIV_ROUND_CLOSEST(max96722->cur_mode->max_fps.denominator, in max96722_s_stream()
1479 max96722->cur_mode->max_fps.numerator)); in max96722_s_stream()
1481 mutex_lock(&max96722->mutex); in max96722_s_stream()
1483 if (on == max96722->streaming) in max96722_s_stream()
1493 ret = __max96722_start_stream(max96722); in max96722_s_stream()
1500 __max96722_stop_stream(max96722); in max96722_s_stream()
1504 max96722->streaming = on; in max96722_s_stream()
1507 mutex_unlock(&max96722->mutex); in max96722_s_stream()
1514 struct max96722 *max96722 = v4l2_get_subdevdata(sd); in max96722_s_power() local
1515 struct i2c_client *client = max96722->client; in max96722_s_power()
1518 mutex_lock(&max96722->mutex); in max96722_s_power()
1521 if (max96722->power_on == !!on) in max96722_s_power()
1531 max96722->power_on = true; in max96722_s_power()
1534 max96722->power_on = false; in max96722_s_power()
1538 mutex_unlock(&max96722->mutex); in max96722_s_power()
1549 static int __max96722_power_on(struct max96722 *max96722) in __max96722_power_on() argument
1553 struct device *dev = &max96722->client->dev; in __max96722_power_on()
1555 if (!IS_ERR(max96722->power_gpio)) { in __max96722_power_on()
1556 gpiod_set_value_cansleep(max96722->power_gpio, 1); in __max96722_power_on()
1560 if (!IS_ERR(max96722->pocen_gpio)) { in __max96722_power_on()
1561 gpiod_set_value_cansleep(max96722->pocen_gpio, 1); in __max96722_power_on()
1565 if (!IS_ERR_OR_NULL(max96722->pins_default)) { in __max96722_power_on()
1566 ret = pinctrl_select_state(max96722->pinctrl, in __max96722_power_on()
1567 max96722->pins_default); in __max96722_power_on()
1572 if (!IS_ERR(max96722->reset_gpio)) in __max96722_power_on()
1573 gpiod_set_value_cansleep(max96722->reset_gpio, 0); in __max96722_power_on()
1575 ret = regulator_bulk_enable(MAX96722_NUM_SUPPLIES, max96722->supplies); in __max96722_power_on()
1580 if (!IS_ERR(max96722->reset_gpio)) { in __max96722_power_on()
1581 gpiod_set_value_cansleep(max96722->reset_gpio, 1); in __max96722_power_on()
1585 if (!IS_ERR(max96722->pwdn_gpio)) in __max96722_power_on()
1586 gpiod_set_value_cansleep(max96722->pwdn_gpio, 1); in __max96722_power_on()
1595 clk_disable_unprepare(max96722->xvclk); in __max96722_power_on()
1600 static void __max96722_power_off(struct max96722 *max96722) in __max96722_power_off() argument
1603 struct device *dev = &max96722->client->dev; in __max96722_power_off()
1605 if (!IS_ERR(max96722->pwdn_gpio)) in __max96722_power_off()
1606 gpiod_set_value_cansleep(max96722->pwdn_gpio, 0); in __max96722_power_off()
1607 clk_disable_unprepare(max96722->xvclk); in __max96722_power_off()
1609 if (!IS_ERR(max96722->reset_gpio)) in __max96722_power_off()
1610 gpiod_set_value_cansleep(max96722->reset_gpio, 0); in __max96722_power_off()
1612 if (!IS_ERR_OR_NULL(max96722->pins_sleep)) { in __max96722_power_off()
1613 ret = pinctrl_select_state(max96722->pinctrl, in __max96722_power_off()
1614 max96722->pins_sleep); in __max96722_power_off()
1619 regulator_bulk_disable(MAX96722_NUM_SUPPLIES, max96722->supplies); in __max96722_power_off()
1621 if (!IS_ERR(max96722->pocen_gpio)) in __max96722_power_off()
1622 gpiod_set_value_cansleep(max96722->pocen_gpio, 0); in __max96722_power_off()
1624 if (!IS_ERR(max96722->power_gpio)) in __max96722_power_off()
1625 gpiod_set_value_cansleep(max96722->power_gpio, 0); in __max96722_power_off()
1632 struct max96722 *max96722 = v4l2_get_subdevdata(sd); in max96722_runtime_resume() local
1634 return __max96722_power_on(max96722); in max96722_runtime_resume()
1641 struct max96722 *max96722 = v4l2_get_subdevdata(sd); in max96722_runtime_suspend() local
1643 __max96722_power_off(max96722); in max96722_runtime_suspend()
1651 struct max96722 *max96722 = v4l2_get_subdevdata(sd); in max96722_open() local
1654 const struct max96722_mode *def_mode = &max96722->supported_modes[0]; in max96722_open()
1656 mutex_lock(&max96722->mutex); in max96722_open()
1663 mutex_unlock(&max96722->mutex); in max96722_open()
1675 struct max96722 *max96722 = v4l2_get_subdevdata(sd); in max96722_enum_frame_interval() local
1677 if (fie->index >= max96722->cfg_modes_num) in max96722_enum_frame_interval()
1680 fie->code = max96722->supported_modes[fie->index].bus_fmt; in max96722_enum_frame_interval()
1681 fie->width = max96722->supported_modes[fie->index].width; in max96722_enum_frame_interval()
1682 fie->height = max96722->supported_modes[fie->index].height; in max96722_enum_frame_interval()
1683 fie->interval = max96722->supported_modes[fie->index].max_fps; in max96722_enum_frame_interval()
1691 struct max96722 *max96722 = v4l2_get_subdevdata(sd); in max96722_g_mbus_config() local
1693 u8 data_lanes = max96722->bus_cfg.bus.mipi_csi2.num_data_lanes; in max96722_g_mbus_config()
1723 struct max96722 *max96722 = v4l2_get_subdevdata(sd); in max96722_get_selection() local
1727 sel->r.width = max96722->cur_mode->width; in max96722_get_selection()
1729 sel->r.height = max96722->cur_mode->height; in max96722_get_selection()
1774 static int max96722_initialize_controls(struct max96722 *max96722) in max96722_initialize_controls() argument
1782 handler = &max96722->ctrl_handler; in max96722_initialize_controls()
1784 mode = max96722->cur_mode; in max96722_initialize_controls()
1788 handler->lock = &max96722->mutex; in max96722_initialize_controls()
1790 max96722->link_freq = v4l2_ctrl_new_int_menu(handler, NULL, in max96722_initialize_controls()
1794 __v4l2_ctrl_s_ctrl(max96722->link_freq, mode->link_freq_idx); in max96722_initialize_controls()
1795 dev_info(&max96722->client->dev, "mipi_freq_idx = %d, mipi_link_freq = %lld\n", in max96722_initialize_controls()
1799 data_lanes = max96722->bus_cfg.bus.mipi_csi2.num_data_lanes; in max96722_initialize_controls()
1801 max96722->pixel_rate = in max96722_initialize_controls()
1804 dev_info(&max96722->client->dev, "pixel_rate = %lld, bpp = %d\n", in max96722_initialize_controls()
1809 dev_err(&max96722->client->dev, "Failed to init controls(%d)\n", ret); in max96722_initialize_controls()
1813 max96722->subdev.ctrl_handler = handler; in max96722_initialize_controls()
1823 static int max96722_configure_regulators(struct max96722 *max96722) in max96722_configure_regulators() argument
1828 max96722->supplies[i].supply = max96722_supply_names[i]; in max96722_configure_regulators()
1830 return devm_regulator_bulk_get(&max96722->client->dev, in max96722_configure_regulators()
1832 max96722->supplies); in max96722_configure_regulators()
1835 static int max96722_parse_dt(struct max96722 *max96722) in max96722_parse_dt() argument
1837 struct device *dev = &max96722->client->dev; in max96722_parse_dt()
1839 u8 mipi_data_lanes = max96722->bus_cfg.bus.mipi_csi2.num_data_lanes; in max96722_parse_dt()
1846 max96722->i2c_addr[I2C_DEV_SER] = SER_I2C_ADDR; in max96722_parse_dt()
1849 max96722->i2c_addr[I2C_DEV_SER] = value; in max96722_parse_dt()
1851 dev_info(dev, "serializer i2c address: 0x%02x\n", max96722->i2c_addr[I2C_DEV_SER]); in max96722_parse_dt()
1859 ret = of_property_read_u32(node, "link-mask", &max96722->link_mask); in max96722_parse_dt()
1863 max96722->link_mask = 0xFF; /* Link A/B/C/D: GMSL2 and enable */ in max96722_parse_dt()
1865 max96722->link_mask = 0x33; /* Link A/B: GMSL2 and enable */ in max96722_parse_dt()
1867 dev_info(dev, "link-mask property: 0x%08x\n", max96722->link_mask); in max96722_parse_dt()
1869 dev_info(dev, "serdes link mask: 0x%02x\n", max96722->link_mask); in max96722_parse_dt()
1873 &max96722->auto_init_deskew_mask); in max96722_parse_dt()
1875 max96722->auto_init_deskew_mask = 0x0F; // 0x0F: default enable all in max96722_parse_dt()
1876 dev_info(dev, "auto init deskew mask: 0x%02x\n", max96722->auto_init_deskew_mask); in max96722_parse_dt()
1880 &max96722->frame_sync_period); in max96722_parse_dt()
1882 max96722->frame_sync_period = 0; // 0: disable (default) in max96722_parse_dt()
1883 dev_info(dev, "frame sync period: %d\n", max96722->frame_sync_period); in max96722_parse_dt()
1893 struct max96722 *max96722; in max96722_probe() local
1903 max96722 = devm_kzalloc(dev, sizeof(*max96722), GFP_KERNEL); in max96722_probe()
1904 if (!max96722) in max96722_probe()
1908 &max96722->module_index); in max96722_probe()
1910 &max96722->module_facing); in max96722_probe()
1912 &max96722->module_name); in max96722_probe()
1914 &max96722->len_name); in max96722_probe()
1920 max96722->regmap = devm_regmap_init_i2c(client, &max96722_regmap_config); in max96722_probe()
1921 if (IS_ERR(max96722->regmap)) { in max96722_probe()
1923 return PTR_ERR(max96722->regmap); in max96722_probe()
1926 max96722->client = client; in max96722_probe()
1927 i2c_set_clientdata(client, max96722); in max96722_probe()
1930 max96722->i2c_addr[I2C_DEV_DES] = client->addr; in max96722_probe()
1931 max96722->i2c_addr[I2C_DEV_SER] = SER_I2C_ADDR; in max96722_probe()
1932 max96722->i2c_addr[I2C_DEV_CAM] = CAM_I2C_ADDR; in max96722_probe()
1941 &max96722->bus_cfg); in max96722_probe()
1946 mipi_data_lanes = max96722->bus_cfg.bus.mipi_csi2.num_data_lanes; in max96722_probe()
1950 max96722->supported_modes = supported_modes_4lane; in max96722_probe()
1951 max96722->cfg_modes_num = ARRAY_SIZE(supported_modes_4lane); in max96722_probe()
1956 max96722->cur_mode = &max96722->supported_modes[0]; in max96722_probe()
1958 max96722->power_gpio = devm_gpiod_get(dev, "power", GPIOD_OUT_LOW); in max96722_probe()
1959 if (IS_ERR(max96722->power_gpio)) in max96722_probe()
1962 max96722->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in max96722_probe()
1963 if (IS_ERR(max96722->reset_gpio)) in max96722_probe()
1966 max96722->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in max96722_probe()
1967 if (IS_ERR(max96722->pwdn_gpio)) in max96722_probe()
1970 max96722->pocen_gpio = devm_gpiod_get(dev, "pocen", GPIOD_OUT_LOW); in max96722_probe()
1971 if (IS_ERR(max96722->pocen_gpio)) in max96722_probe()
1974 max96722->lock_gpio = devm_gpiod_get(dev, "lock", GPIOD_IN); in max96722_probe()
1975 if (IS_ERR(max96722->lock_gpio)) in max96722_probe()
1978 ret = max96722_configure_regulators(max96722); in max96722_probe()
1984 max96722->pinctrl = devm_pinctrl_get(dev); in max96722_probe()
1985 if (!IS_ERR(max96722->pinctrl)) { in max96722_probe()
1986 max96722->pins_default = pinctrl_lookup_state( in max96722_probe()
1987 max96722->pinctrl, OF_CAMERA_PINCTRL_STATE_DEFAULT); in max96722_probe()
1988 if (IS_ERR(max96722->pins_default)) in max96722_probe()
1991 max96722->pins_sleep = pinctrl_lookup_state( in max96722_probe()
1992 max96722->pinctrl, OF_CAMERA_PINCTRL_STATE_SLEEP); in max96722_probe()
1993 if (IS_ERR(max96722->pins_sleep)) in max96722_probe()
1997 max96722_parse_dt(max96722); in max96722_probe()
1999 mutex_init(&max96722->mutex); in max96722_probe()
2001 sd = &max96722->subdev; in max96722_probe()
2003 ret = max96722_initialize_controls(max96722); in max96722_probe()
2007 ret = __max96722_power_on(max96722); in max96722_probe()
2011 ret = max96722_check_local_chipid(max96722); in max96722_probe()
2020 max96722->pad.flags = MEDIA_PAD_FL_SOURCE; in max96722_probe()
2022 ret = media_entity_pads_init(&sd->entity, 1, &max96722->pad); in max96722_probe()
2028 if (strcmp(max96722->module_facing, "back") == 0) in max96722_probe()
2033 v4l2_set_subdevdata(sd, max96722); in max96722_probe()
2036 max96722->module_index, facing, MAX96722_NAME, in max96722_probe()
2044 if (!IS_ERR(max96722->lock_gpio)) { in max96722_probe()
2045 max96722->hot_plug_irq = gpiod_to_irq(max96722->lock_gpio); in max96722_probe()
2046 if (max96722->hot_plug_irq < 0) { in max96722_probe()
2050 max96722->hot_plug_irq, in max96722_probe()
2055 max96722); in max96722_probe()
2058 max96722->hot_plug_irq = -1; in max96722_probe()
2060 disable_irq(max96722->hot_plug_irq); in max96722_probe()
2076 __max96722_power_off(max96722); in max96722_probe()
2078 v4l2_ctrl_handler_free(&max96722->ctrl_handler); in max96722_probe()
2080 mutex_destroy(&max96722->mutex); in max96722_probe()
2088 struct max96722 *max96722 = v4l2_get_subdevdata(sd); in max96722_remove() local
2094 v4l2_ctrl_handler_free(&max96722->ctrl_handler); in max96722_remove()
2095 mutex_destroy(&max96722->mutex); in max96722_remove()
2099 __max96722_power_off(max96722); in max96722_remove()