Lines Matching refs:state

184 	int (*init)(struct adv7180_state *state);
209 static int adv7180_select_page(struct adv7180_state *state, unsigned int page) in adv7180_select_page() argument
211 if (state->register_page != page) { in adv7180_select_page()
212 i2c_smbus_write_byte_data(state->client, ADV7180_REG_CTRL, in adv7180_select_page()
214 state->register_page = page; in adv7180_select_page()
220 static int adv7180_write(struct adv7180_state *state, unsigned int reg, in adv7180_write() argument
223 lockdep_assert_held(&state->mutex); in adv7180_write()
224 adv7180_select_page(state, reg >> 8); in adv7180_write()
225 return i2c_smbus_write_byte_data(state->client, reg & 0xff, value); in adv7180_write()
228 static int adv7180_read(struct adv7180_state *state, unsigned int reg) in adv7180_read() argument
230 lockdep_assert_held(&state->mutex); in adv7180_read()
231 adv7180_select_page(state, reg >> 8); in adv7180_read()
232 return i2c_smbus_read_byte_data(state->client, reg & 0xff); in adv7180_read()
235 static int adv7180_csi_write(struct adv7180_state *state, unsigned int reg, in adv7180_csi_write() argument
238 return i2c_smbus_write_byte_data(state->csi_client, reg, value); in adv7180_csi_write()
241 static int adv7180_set_video_standard(struct adv7180_state *state, in adv7180_set_video_standard() argument
244 return state->chip_info->set_std(state, std); in adv7180_set_video_standard()
247 static int adv7180_vpp_write(struct adv7180_state *state, unsigned int reg, in adv7180_vpp_write() argument
250 return i2c_smbus_write_byte_data(state->vpp_client, reg, value); in adv7180_vpp_write()
312 static int __adv7180_status(struct adv7180_state *state, u32 *status, in __adv7180_status() argument
315 int status1 = adv7180_read(state, ADV7180_REG_STATUS1); in __adv7180_status()
335 struct adv7180_state *state = to_state(sd); in adv7180_querystd() local
336 int err = mutex_lock_interruptible(&state->mutex); in adv7180_querystd()
341 if (!state->autodetect || state->irq > 0) in adv7180_querystd()
342 *std = state->curr_norm; in adv7180_querystd()
344 err = __adv7180_status(state, NULL, std); in adv7180_querystd()
346 mutex_unlock(&state->mutex); in adv7180_querystd()
353 struct adv7180_state *state = to_state(sd); in adv7180_s_routing() local
354 int ret = mutex_lock_interruptible(&state->mutex); in adv7180_s_routing()
359 if (input > 31 || !(BIT(input) & state->chip_info->valid_input_mask)) { in adv7180_s_routing()
364 ret = state->chip_info->select_input(state, input); in adv7180_s_routing()
367 state->input = input; in adv7180_s_routing()
369 mutex_unlock(&state->mutex); in adv7180_s_routing()
375 struct adv7180_state *state = to_state(sd); in adv7180_g_input_status() local
376 int ret = mutex_lock_interruptible(&state->mutex); in adv7180_g_input_status()
380 ret = __adv7180_status(state, status, NULL); in adv7180_g_input_status()
381 mutex_unlock(&state->mutex); in adv7180_g_input_status()
385 static int adv7180_program_std(struct adv7180_state *state) in adv7180_program_std() argument
389 if (state->autodetect) { in adv7180_program_std()
390 ret = adv7180_set_video_standard(state, in adv7180_program_std()
395 __adv7180_status(state, NULL, &state->curr_norm); in adv7180_program_std()
397 ret = v4l2_std_to_adv7180(state->curr_norm); in adv7180_program_std()
401 ret = adv7180_set_video_standard(state, ret); in adv7180_program_std()
411 struct adv7180_state *state = to_state(sd); in adv7180_s_std() local
412 int ret = mutex_lock_interruptible(&state->mutex); in adv7180_s_std()
419 state->autodetect = true; in adv7180_s_std()
426 state->curr_norm = std; in adv7180_s_std()
427 state->autodetect = false; in adv7180_s_std()
430 ret = adv7180_program_std(state); in adv7180_s_std()
432 mutex_unlock(&state->mutex); in adv7180_s_std()
436 static int adv7180_set_power(struct adv7180_state *state, bool on) in adv7180_set_power() argument
446 ret = adv7180_write(state, ADV7180_REG_PWR_MAN, val); in adv7180_set_power()
450 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) { in adv7180_set_power()
452 adv7180_csi_write(state, 0xDE, 0x02); in adv7180_set_power()
453 adv7180_csi_write(state, 0xD2, 0xF7); in adv7180_set_power()
454 adv7180_csi_write(state, 0xD8, 0x65); in adv7180_set_power()
455 adv7180_csi_write(state, 0xE0, 0x09); in adv7180_set_power()
456 adv7180_csi_write(state, 0x2C, 0x00); in adv7180_set_power()
457 if (state->field == V4L2_FIELD_NONE) in adv7180_set_power()
458 adv7180_csi_write(state, 0x1D, 0x80); in adv7180_set_power()
459 adv7180_csi_write(state, 0x00, 0x00); in adv7180_set_power()
461 adv7180_csi_write(state, 0x00, 0x80); in adv7180_set_power()
470 struct adv7180_state *state = to_state(sd); in adv7180_s_power() local
473 ret = mutex_lock_interruptible(&state->mutex); in adv7180_s_power()
477 ret = adv7180_set_power(state, on); in adv7180_s_power()
479 state->powered = on; in adv7180_s_power()
481 mutex_unlock(&state->mutex); in adv7180_s_power()
488 struct adv7180_state *state = to_state(sd); in adv7180_s_ctrl() local
489 int ret = mutex_lock_interruptible(&state->mutex); in adv7180_s_ctrl()
497 ret = adv7180_write(state, ADV7180_REG_BRI, val); in adv7180_s_ctrl()
501 ret = adv7180_write(state, ADV7180_REG_HUE, -val); in adv7180_s_ctrl()
504 ret = adv7180_write(state, ADV7180_REG_CON, val); in adv7180_s_ctrl()
511 ret = adv7180_write(state, ADV7180_REG_SD_SAT_CB, val); in adv7180_s_ctrl()
514 ret = adv7180_write(state, ADV7180_REG_SD_SAT_CR, val); in adv7180_s_ctrl()
519 adv7180_write(state, 0x80d9, 0x44); in adv7180_s_ctrl()
520 adv7180_write(state, ADV7180_REG_FLCONTROL, in adv7180_s_ctrl()
524 adv7180_write(state, 0x80d9, 0xc4); in adv7180_s_ctrl()
525 adv7180_write(state, ADV7180_REG_FLCONTROL, 0x00); in adv7180_s_ctrl()
532 mutex_unlock(&state->mutex); in adv7180_s_ctrl()
550 static int adv7180_init_controls(struct adv7180_state *state) in adv7180_init_controls() argument
552 v4l2_ctrl_handler_init(&state->ctrl_hdl, 4); in adv7180_init_controls()
554 v4l2_ctrl_new_std(&state->ctrl_hdl, &adv7180_ctrl_ops, in adv7180_init_controls()
557 v4l2_ctrl_new_std(&state->ctrl_hdl, &adv7180_ctrl_ops, in adv7180_init_controls()
560 v4l2_ctrl_new_std(&state->ctrl_hdl, &adv7180_ctrl_ops, in adv7180_init_controls()
563 v4l2_ctrl_new_std(&state->ctrl_hdl, &adv7180_ctrl_ops, in adv7180_init_controls()
566 v4l2_ctrl_new_custom(&state->ctrl_hdl, &adv7180_ctrl_fast_switch, NULL); in adv7180_init_controls()
568 state->sd.ctrl_handler = &state->ctrl_hdl; in adv7180_init_controls()
569 if (state->ctrl_hdl.error) { in adv7180_init_controls()
570 int err = state->ctrl_hdl.error; in adv7180_init_controls()
572 v4l2_ctrl_handler_free(&state->ctrl_hdl); in adv7180_init_controls()
575 v4l2_ctrl_handler_setup(&state->ctrl_hdl); in adv7180_init_controls()
579 static void adv7180_exit_controls(struct adv7180_state *state) in adv7180_exit_controls() argument
581 v4l2_ctrl_handler_free(&state->ctrl_hdl); in adv7180_exit_controls()
599 struct adv7180_state *state = to_state(sd); in adv7180_mbus_fmt() local
604 fmt->height = state->curr_norm & V4L2_STD_525_60 ? 480 : 576; in adv7180_mbus_fmt()
609 static int adv7180_set_field_mode(struct adv7180_state *state) in adv7180_set_field_mode() argument
611 if (!(state->chip_info->flags & ADV7180_FLAG_I2P)) in adv7180_set_field_mode()
614 if (state->field == V4L2_FIELD_NONE) { in adv7180_set_field_mode()
615 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) { in adv7180_set_field_mode()
616 adv7180_csi_write(state, 0x01, 0x20); in adv7180_set_field_mode()
617 adv7180_csi_write(state, 0x02, 0x28); in adv7180_set_field_mode()
618 adv7180_csi_write(state, 0x03, 0x38); in adv7180_set_field_mode()
619 adv7180_csi_write(state, 0x04, 0x30); in adv7180_set_field_mode()
620 adv7180_csi_write(state, 0x05, 0x30); in adv7180_set_field_mode()
621 adv7180_csi_write(state, 0x06, 0x80); in adv7180_set_field_mode()
622 adv7180_csi_write(state, 0x07, 0x70); in adv7180_set_field_mode()
623 adv7180_csi_write(state, 0x08, 0x50); in adv7180_set_field_mode()
625 adv7180_vpp_write(state, 0xa3, 0x00); in adv7180_set_field_mode()
626 adv7180_vpp_write(state, 0x5b, 0x00); in adv7180_set_field_mode()
627 adv7180_vpp_write(state, 0x55, 0x80); in adv7180_set_field_mode()
629 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) { in adv7180_set_field_mode()
630 adv7180_csi_write(state, 0x01, 0x18); in adv7180_set_field_mode()
631 adv7180_csi_write(state, 0x02, 0x18); in adv7180_set_field_mode()
632 adv7180_csi_write(state, 0x03, 0x30); in adv7180_set_field_mode()
633 adv7180_csi_write(state, 0x04, 0x20); in adv7180_set_field_mode()
634 adv7180_csi_write(state, 0x05, 0x28); in adv7180_set_field_mode()
635 adv7180_csi_write(state, 0x06, 0x40); in adv7180_set_field_mode()
636 adv7180_csi_write(state, 0x07, 0x58); in adv7180_set_field_mode()
637 adv7180_csi_write(state, 0x08, 0x30); in adv7180_set_field_mode()
639 adv7180_vpp_write(state, 0xa3, 0x70); in adv7180_set_field_mode()
640 adv7180_vpp_write(state, 0x5b, 0x80); in adv7180_set_field_mode()
641 adv7180_vpp_write(state, 0x55, 0x00); in adv7180_set_field_mode()
651 struct adv7180_state *state = to_state(sd); in adv7180_get_pad_format() local
657 format->format.field = state->field; in adv7180_get_pad_format()
667 struct adv7180_state *state = to_state(sd); in adv7180_set_pad_format() local
672 if (!(state->chip_info->flags & ADV7180_FLAG_I2P)) in adv7180_set_pad_format()
682 if (state->field != format->format.field) { in adv7180_set_pad_format()
683 state->field = format->format.field; in adv7180_set_pad_format()
684 adv7180_set_power(state, false); in adv7180_set_pad_format()
685 adv7180_set_field_mode(state); in adv7180_set_pad_format()
686 adv7180_set_power(state, true); in adv7180_set_pad_format()
699 struct adv7180_state *state = to_state(sd); in adv7180_g_mbus_config() local
701 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) { in adv7180_g_mbus_config()
746 struct adv7180_state *state = devid; in adv7180_irq() local
749 mutex_lock(&state->mutex); in adv7180_irq()
750 isr3 = adv7180_read(state, ADV7180_REG_ISR3); in adv7180_irq()
752 adv7180_write(state, ADV7180_REG_ICR3, isr3); in adv7180_irq()
754 if (isr3 & ADV7180_IRQ3_AD_CHANGE && state->autodetect) in adv7180_irq()
755 __adv7180_status(state, NULL, &state->curr_norm); in adv7180_irq()
756 mutex_unlock(&state->mutex); in adv7180_irq()
761 static int adv7180_init(struct adv7180_state *state) in adv7180_init() argument
766 ret = adv7180_write(state, ADV7180_REG_EXTENDED_OUTPUT_CONTROL, in adv7180_init()
772 return adv7180_write(state, ADV7180_REG_NTSC_V_BIT_END, in adv7180_init()
776 static int adv7180_set_std(struct adv7180_state *state, unsigned int std) in adv7180_set_std() argument
778 return adv7180_write(state, ADV7180_REG_INPUT_CONTROL, in adv7180_set_std()
779 (std << 4) | state->input); in adv7180_set_std()
782 static int adv7180_select_input(struct adv7180_state *state, unsigned int input) in adv7180_select_input() argument
786 ret = adv7180_read(state, ADV7180_REG_INPUT_CONTROL); in adv7180_select_input()
792 return adv7180_write(state, ADV7180_REG_INPUT_CONTROL, ret); in adv7180_select_input()
795 static int adv7182_init(struct adv7180_state *state) in adv7182_init() argument
797 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) in adv7182_init()
798 adv7180_write(state, ADV7180_REG_CSI_SLAVE_ADDR, in adv7182_init()
801 if (state->chip_info->flags & ADV7180_FLAG_I2P) in adv7182_init()
802 adv7180_write(state, ADV7180_REG_VPP_SLAVE_ADDR, in adv7182_init()
805 if (state->chip_info->flags & ADV7180_FLAG_V2) { in adv7182_init()
807 adv7180_write(state, 0x0080, 0x51); in adv7182_init()
808 adv7180_write(state, 0x0081, 0x51); in adv7182_init()
809 adv7180_write(state, 0x0082, 0x68); in adv7182_init()
813 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) { in adv7182_init()
814 adv7180_write(state, 0x0003, 0x4e); in adv7182_init()
815 adv7180_write(state, 0x0004, 0x57); in adv7182_init()
816 adv7180_write(state, 0x001d, 0xc0); in adv7182_init()
818 if (state->chip_info->flags & ADV7180_FLAG_V2) in adv7182_init()
819 adv7180_write(state, 0x0004, 0x17); in adv7182_init()
821 adv7180_write(state, 0x0004, 0x07); in adv7182_init()
822 adv7180_write(state, 0x0003, 0x0c); in adv7182_init()
823 adv7180_write(state, 0x001d, 0x40); in adv7182_init()
826 adv7180_write(state, 0x0013, 0x00); in adv7182_init()
831 static int adv7182_set_std(struct adv7180_state *state, unsigned int std) in adv7182_set_std() argument
833 return adv7180_write(state, ADV7182_REG_INPUT_VIDSEL, std << 4); in adv7182_set_std()
888 static int adv7182_select_input(struct adv7180_state *state, unsigned int input) in adv7182_select_input() argument
895 ret = adv7180_write(state, ADV7180_REG_INPUT_CONTROL, input); in adv7182_select_input()
900 adv7180_write(state, 0x809c, 0x00); in adv7182_select_input()
901 adv7180_write(state, 0x809c, 0xff); in adv7182_select_input()
909 adv7180_write(state, 0x0017, 0x41); in adv7182_select_input()
912 adv7180_write(state, 0x0017, 0x01); in adv7182_select_input()
916 if (state->chip_info->flags & ADV7180_FLAG_V2) in adv7182_select_input()
922 adv7180_write(state, 0x0052 + i, lbias[i]); in adv7182_select_input()
926 adv7180_write(state, 0x005f, 0xa8); in adv7182_select_input()
927 adv7180_write(state, 0x005a, 0x90); in adv7182_select_input()
928 adv7180_write(state, 0x0060, 0xb0); in adv7182_select_input()
929 adv7180_write(state, 0x80b6, 0x08); in adv7182_select_input()
930 adv7180_write(state, 0x80c0, 0xa0); in adv7182_select_input()
932 adv7180_write(state, 0x005f, 0xf0); in adv7182_select_input()
933 adv7180_write(state, 0x005a, 0xd0); in adv7182_select_input()
934 adv7180_write(state, 0x0060, 0x10); in adv7182_select_input()
935 adv7180_write(state, 0x80b6, 0x9c); in adv7182_select_input()
936 adv7180_write(state, 0x80c0, 0x00); in adv7182_select_input()
1107 static int init_device(struct adv7180_state *state) in init_device() argument
1111 mutex_lock(&state->mutex); in init_device()
1113 adv7180_write(state, ADV7180_REG_PWR_MAN, ADV7180_PWR_MAN_RES); in init_device()
1116 ret = state->chip_info->init(state); in init_device()
1120 ret = adv7180_program_std(state); in init_device()
1124 adv7180_set_field_mode(state); in init_device()
1127 if (state->irq > 0) { in init_device()
1129 ret = adv7180_write(state, ADV7180_REG_ICONF1, in init_device()
1135 ret = adv7180_write(state, ADV7180_REG_IMR1, 0); in init_device()
1139 ret = adv7180_write(state, ADV7180_REG_IMR2, 0); in init_device()
1144 ret = adv7180_write(state, ADV7180_REG_IMR3, in init_device()
1149 ret = adv7180_write(state, ADV7180_REG_IMR4, 0); in init_device()
1155 mutex_unlock(&state->mutex); in init_device()
1163 struct adv7180_state *state; in adv7180_probe() local
1174 state = devm_kzalloc(&client->dev, sizeof(*state), GFP_KERNEL); in adv7180_probe()
1175 if (state == NULL) in adv7180_probe()
1178 state->client = client; in adv7180_probe()
1179 state->field = V4L2_FIELD_INTERLACED; in adv7180_probe()
1180 state->chip_info = (struct adv7180_chip_info *)id->driver_data; in adv7180_probe()
1182 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) { in adv7180_probe()
1183 state->csi_client = i2c_new_dummy(client->adapter, in adv7180_probe()
1185 if (!state->csi_client) in adv7180_probe()
1189 if (state->chip_info->flags & ADV7180_FLAG_I2P) { in adv7180_probe()
1190 state->vpp_client = i2c_new_dummy(client->adapter, in adv7180_probe()
1192 if (!state->vpp_client) { in adv7180_probe()
1198 state->irq = client->irq; in adv7180_probe()
1199 mutex_init(&state->mutex); in adv7180_probe()
1200 state->autodetect = true; in adv7180_probe()
1201 if (state->chip_info->flags & ADV7180_FLAG_RESET_POWERED) in adv7180_probe()
1202 state->powered = true; in adv7180_probe()
1204 state->powered = false; in adv7180_probe()
1205 state->input = 0; in adv7180_probe()
1206 sd = &state->sd; in adv7180_probe()
1210 ret = adv7180_init_controls(state); in adv7180_probe()
1214 state->pad.flags = MEDIA_PAD_FL_SOURCE; in adv7180_probe()
1216 ret = media_entity_init(&sd->entity, 1, &state->pad, 0); in adv7180_probe()
1220 ret = init_device(state); in adv7180_probe()
1224 if (state->irq) { in adv7180_probe()
1227 KBUILD_MODNAME, state); in adv7180_probe()
1239 if (state->irq > 0) in adv7180_probe()
1240 free_irq(client->irq, state); in adv7180_probe()
1244 adv7180_exit_controls(state); in adv7180_probe()
1246 if (state->chip_info->flags & ADV7180_FLAG_I2P) in adv7180_probe()
1247 i2c_unregister_device(state->vpp_client); in adv7180_probe()
1249 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) in adv7180_probe()
1250 i2c_unregister_device(state->csi_client); in adv7180_probe()
1251 mutex_destroy(&state->mutex); in adv7180_probe()
1258 struct adv7180_state *state = to_state(sd); in adv7180_remove() local
1262 if (state->irq > 0) in adv7180_remove()
1263 free_irq(client->irq, state); in adv7180_remove()
1266 adv7180_exit_controls(state); in adv7180_remove()
1268 if (state->chip_info->flags & ADV7180_FLAG_I2P) in adv7180_remove()
1269 i2c_unregister_device(state->vpp_client); in adv7180_remove()
1270 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) in adv7180_remove()
1271 i2c_unregister_device(state->csi_client); in adv7180_remove()
1273 mutex_destroy(&state->mutex); in adv7180_remove()
1297 struct adv7180_state *state = to_state(sd); in adv7180_suspend() local
1299 return adv7180_set_power(state, false); in adv7180_suspend()
1306 struct adv7180_state *state = to_state(sd); in adv7180_resume() local
1309 ret = init_device(state); in adv7180_resume()
1313 ret = adv7180_set_power(state, state->powered); in adv7180_resume()