Lines Matching refs:state
185 int (*init)(struct adv7180_state *state);
210 static int adv7180_select_page(struct adv7180_state *state, unsigned int page) in adv7180_select_page() argument
212 if (state->register_page != page) { in adv7180_select_page()
213 i2c_smbus_write_byte_data(state->client, ADV7180_REG_CTRL, in adv7180_select_page()
215 state->register_page = page; in adv7180_select_page()
221 static int adv7180_write(struct adv7180_state *state, unsigned int reg, in adv7180_write() argument
224 lockdep_assert_held(&state->mutex); in adv7180_write()
225 adv7180_select_page(state, reg >> 8); in adv7180_write()
226 return i2c_smbus_write_byte_data(state->client, reg & 0xff, value); in adv7180_write()
229 static int adv7180_read(struct adv7180_state *state, unsigned int reg) in adv7180_read() argument
231 lockdep_assert_held(&state->mutex); in adv7180_read()
232 adv7180_select_page(state, reg >> 8); in adv7180_read()
233 return i2c_smbus_read_byte_data(state->client, reg & 0xff); in adv7180_read()
236 static int adv7180_csi_write(struct adv7180_state *state, unsigned int reg, in adv7180_csi_write() argument
239 return i2c_smbus_write_byte_data(state->csi_client, reg, value); in adv7180_csi_write()
242 static int adv7180_set_video_standard(struct adv7180_state *state, in adv7180_set_video_standard() argument
245 return state->chip_info->set_std(state, std); in adv7180_set_video_standard()
248 static int adv7180_vpp_write(struct adv7180_state *state, unsigned int reg, in adv7180_vpp_write() argument
251 return i2c_smbus_write_byte_data(state->vpp_client, reg, value); in adv7180_vpp_write()
313 static int __adv7180_status(struct adv7180_state *state, u32 *status, in __adv7180_status() argument
316 int status1 = adv7180_read(state, ADV7180_REG_STATUS1); in __adv7180_status()
336 struct adv7180_state *state = to_state(sd); in adv7180_querystd() local
337 int err = mutex_lock_interruptible(&state->mutex); in adv7180_querystd()
342 if (!state->autodetect || state->irq > 0) in adv7180_querystd()
343 *std = state->curr_norm; in adv7180_querystd()
345 err = __adv7180_status(state, NULL, std); in adv7180_querystd()
347 mutex_unlock(&state->mutex); in adv7180_querystd()
354 struct adv7180_state *state = to_state(sd); in adv7180_s_routing() local
355 int ret = mutex_lock_interruptible(&state->mutex); in adv7180_s_routing()
360 if (input > 31 || !(BIT(input) & state->chip_info->valid_input_mask)) { in adv7180_s_routing()
365 ret = state->chip_info->select_input(state, input); in adv7180_s_routing()
368 state->input = input; in adv7180_s_routing()
370 mutex_unlock(&state->mutex); in adv7180_s_routing()
376 struct adv7180_state *state = to_state(sd); in adv7180_g_input_status() local
377 int ret = mutex_lock_interruptible(&state->mutex); in adv7180_g_input_status()
381 ret = __adv7180_status(state, status, NULL); in adv7180_g_input_status()
382 mutex_unlock(&state->mutex); in adv7180_g_input_status()
386 static int adv7180_program_std(struct adv7180_state *state) in adv7180_program_std() argument
390 if (state->autodetect) { in adv7180_program_std()
391 ret = adv7180_set_video_standard(state, in adv7180_program_std()
396 __adv7180_status(state, NULL, &state->curr_norm); in adv7180_program_std()
398 ret = v4l2_std_to_adv7180(state->curr_norm); in adv7180_program_std()
402 ret = adv7180_set_video_standard(state, ret); in adv7180_program_std()
412 struct adv7180_state *state = to_state(sd); in adv7180_s_std() local
413 int ret = mutex_lock_interruptible(&state->mutex); in adv7180_s_std()
420 state->autodetect = true; in adv7180_s_std()
427 state->curr_norm = std; in adv7180_s_std()
428 state->autodetect = false; in adv7180_s_std()
431 ret = adv7180_program_std(state); in adv7180_s_std()
433 mutex_unlock(&state->mutex); in adv7180_s_std()
437 static int adv7180_set_power(struct adv7180_state *state, bool on) in adv7180_set_power() argument
447 ret = adv7180_write(state, ADV7180_REG_PWR_MAN, val); in adv7180_set_power()
451 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) { in adv7180_set_power()
453 adv7180_csi_write(state, 0xDE, 0x02); in adv7180_set_power()
454 adv7180_csi_write(state, 0xD2, 0xF7); in adv7180_set_power()
455 adv7180_csi_write(state, 0xD8, 0x65); in adv7180_set_power()
456 adv7180_csi_write(state, 0xE0, 0x09); in adv7180_set_power()
457 adv7180_csi_write(state, 0x2C, 0x00); in adv7180_set_power()
458 if (state->field == V4L2_FIELD_NONE) in adv7180_set_power()
459 adv7180_csi_write(state, 0x1D, 0x80); in adv7180_set_power()
460 adv7180_csi_write(state, 0x00, 0x00); in adv7180_set_power()
462 adv7180_csi_write(state, 0x00, 0x80); in adv7180_set_power()
471 struct adv7180_state *state = to_state(sd); in adv7180_s_power() local
474 ret = mutex_lock_interruptible(&state->mutex); in adv7180_s_power()
478 ret = adv7180_set_power(state, on); in adv7180_s_power()
480 state->powered = on; in adv7180_s_power()
482 mutex_unlock(&state->mutex); in adv7180_s_power()
489 struct adv7180_state *state = to_state(sd); in adv7180_s_ctrl() local
490 int ret = mutex_lock_interruptible(&state->mutex); in adv7180_s_ctrl()
498 ret = adv7180_write(state, ADV7180_REG_BRI, val); in adv7180_s_ctrl()
502 ret = adv7180_write(state, ADV7180_REG_HUE, -val); in adv7180_s_ctrl()
505 ret = adv7180_write(state, ADV7180_REG_CON, val); in adv7180_s_ctrl()
512 ret = adv7180_write(state, ADV7180_REG_SD_SAT_CB, val); in adv7180_s_ctrl()
515 ret = adv7180_write(state, ADV7180_REG_SD_SAT_CR, val); in adv7180_s_ctrl()
520 adv7180_write(state, 0x80d9, 0x44); in adv7180_s_ctrl()
521 adv7180_write(state, ADV7180_REG_FLCONTROL, in adv7180_s_ctrl()
525 adv7180_write(state, 0x80d9, 0xc4); in adv7180_s_ctrl()
526 adv7180_write(state, ADV7180_REG_FLCONTROL, 0x00); in adv7180_s_ctrl()
533 mutex_unlock(&state->mutex); in adv7180_s_ctrl()
551 static int adv7180_init_controls(struct adv7180_state *state) in adv7180_init_controls() argument
553 v4l2_ctrl_handler_init(&state->ctrl_hdl, 4); in adv7180_init_controls()
555 v4l2_ctrl_new_std(&state->ctrl_hdl, &adv7180_ctrl_ops, in adv7180_init_controls()
558 v4l2_ctrl_new_std(&state->ctrl_hdl, &adv7180_ctrl_ops, in adv7180_init_controls()
561 v4l2_ctrl_new_std(&state->ctrl_hdl, &adv7180_ctrl_ops, in adv7180_init_controls()
564 v4l2_ctrl_new_std(&state->ctrl_hdl, &adv7180_ctrl_ops, in adv7180_init_controls()
567 v4l2_ctrl_new_custom(&state->ctrl_hdl, &adv7180_ctrl_fast_switch, NULL); in adv7180_init_controls()
569 state->sd.ctrl_handler = &state->ctrl_hdl; in adv7180_init_controls()
570 if (state->ctrl_hdl.error) { in adv7180_init_controls()
571 int err = state->ctrl_hdl.error; in adv7180_init_controls()
573 v4l2_ctrl_handler_free(&state->ctrl_hdl); in adv7180_init_controls()
576 v4l2_ctrl_handler_setup(&state->ctrl_hdl); in adv7180_init_controls()
580 static void adv7180_exit_controls(struct adv7180_state *state) in adv7180_exit_controls() argument
582 v4l2_ctrl_handler_free(&state->ctrl_hdl); in adv7180_exit_controls()
600 struct adv7180_state *state = to_state(sd); in adv7180_mbus_fmt() local
605 fmt->height = state->curr_norm & V4L2_STD_525_60 ? 480 : 576; in adv7180_mbus_fmt()
610 static int adv7180_set_field_mode(struct adv7180_state *state) in adv7180_set_field_mode() argument
612 if (!(state->chip_info->flags & ADV7180_FLAG_I2P)) in adv7180_set_field_mode()
615 if (state->field == V4L2_FIELD_NONE) { in adv7180_set_field_mode()
616 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) { in adv7180_set_field_mode()
617 adv7180_csi_write(state, 0x01, 0x20); in adv7180_set_field_mode()
618 adv7180_csi_write(state, 0x02, 0x28); in adv7180_set_field_mode()
619 adv7180_csi_write(state, 0x03, 0x38); in adv7180_set_field_mode()
620 adv7180_csi_write(state, 0x04, 0x30); in adv7180_set_field_mode()
621 adv7180_csi_write(state, 0x05, 0x30); in adv7180_set_field_mode()
622 adv7180_csi_write(state, 0x06, 0x80); in adv7180_set_field_mode()
623 adv7180_csi_write(state, 0x07, 0x70); in adv7180_set_field_mode()
624 adv7180_csi_write(state, 0x08, 0x50); in adv7180_set_field_mode()
626 adv7180_vpp_write(state, 0xa3, 0x00); in adv7180_set_field_mode()
627 adv7180_vpp_write(state, 0x5b, 0x00); in adv7180_set_field_mode()
628 adv7180_vpp_write(state, 0x55, 0x80); in adv7180_set_field_mode()
630 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) { in adv7180_set_field_mode()
631 adv7180_csi_write(state, 0x01, 0x18); in adv7180_set_field_mode()
632 adv7180_csi_write(state, 0x02, 0x18); in adv7180_set_field_mode()
633 adv7180_csi_write(state, 0x03, 0x30); in adv7180_set_field_mode()
634 adv7180_csi_write(state, 0x04, 0x20); in adv7180_set_field_mode()
635 adv7180_csi_write(state, 0x05, 0x28); in adv7180_set_field_mode()
636 adv7180_csi_write(state, 0x06, 0x40); in adv7180_set_field_mode()
637 adv7180_csi_write(state, 0x07, 0x58); in adv7180_set_field_mode()
638 adv7180_csi_write(state, 0x08, 0x30); in adv7180_set_field_mode()
640 adv7180_vpp_write(state, 0xa3, 0x70); in adv7180_set_field_mode()
641 adv7180_vpp_write(state, 0x5b, 0x80); in adv7180_set_field_mode()
642 adv7180_vpp_write(state, 0x55, 0x00); in adv7180_set_field_mode()
652 struct adv7180_state *state = to_state(sd); in adv7180_get_pad_format() local
658 format->format.field = state->field; in adv7180_get_pad_format()
668 struct adv7180_state *state = to_state(sd); in adv7180_set_pad_format() local
673 if (!(state->chip_info->flags & ADV7180_FLAG_I2P)) in adv7180_set_pad_format()
683 if (state->field != format->format.field) { in adv7180_set_pad_format()
684 state->field = format->format.field; in adv7180_set_pad_format()
685 adv7180_set_power(state, false); in adv7180_set_pad_format()
686 adv7180_set_field_mode(state); in adv7180_set_pad_format()
687 adv7180_set_power(state, true); in adv7180_set_pad_format()
700 struct adv7180_state *state = to_state(sd); in adv7180_g_mbus_config() local
702 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) { in adv7180_g_mbus_config()
747 struct adv7180_state *state = devid; in adv7180_irq() local
750 mutex_lock(&state->mutex); in adv7180_irq()
751 isr3 = adv7180_read(state, ADV7180_REG_ISR3); in adv7180_irq()
753 adv7180_write(state, ADV7180_REG_ICR3, isr3); in adv7180_irq()
755 if (isr3 & ADV7180_IRQ3_AD_CHANGE && state->autodetect) in adv7180_irq()
756 __adv7180_status(state, NULL, &state->curr_norm); in adv7180_irq()
757 mutex_unlock(&state->mutex); in adv7180_irq()
762 static int adv7180_init(struct adv7180_state *state) in adv7180_init() argument
767 ret = adv7180_write(state, ADV7180_REG_EXTENDED_OUTPUT_CONTROL, in adv7180_init()
773 return adv7180_write(state, ADV7180_REG_NTSC_V_BIT_END, in adv7180_init()
777 static int adv7180_set_std(struct adv7180_state *state, unsigned int std) in adv7180_set_std() argument
779 return adv7180_write(state, ADV7180_REG_INPUT_CONTROL, in adv7180_set_std()
780 (std << 4) | state->input); in adv7180_set_std()
783 static int adv7180_select_input(struct adv7180_state *state, unsigned int input) in adv7180_select_input() argument
787 ret = adv7180_read(state, ADV7180_REG_INPUT_CONTROL); in adv7180_select_input()
793 return adv7180_write(state, ADV7180_REG_INPUT_CONTROL, ret); in adv7180_select_input()
796 static int adv7182_init(struct adv7180_state *state) in adv7182_init() argument
798 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) in adv7182_init()
799 adv7180_write(state, ADV7180_REG_CSI_SLAVE_ADDR, in adv7182_init()
802 if (state->chip_info->flags & ADV7180_FLAG_I2P) in adv7182_init()
803 adv7180_write(state, ADV7180_REG_VPP_SLAVE_ADDR, in adv7182_init()
806 if (state->chip_info->flags & ADV7180_FLAG_V2) { in adv7182_init()
808 adv7180_write(state, 0x0080, 0x51); in adv7182_init()
809 adv7180_write(state, 0x0081, 0x51); in adv7182_init()
810 adv7180_write(state, 0x0082, 0x68); in adv7182_init()
814 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) { in adv7182_init()
815 adv7180_write(state, 0x0003, 0x4e); in adv7182_init()
816 adv7180_write(state, 0x0004, 0x57); in adv7182_init()
817 adv7180_write(state, 0x001d, 0xc0); in adv7182_init()
819 if (state->chip_info->flags & ADV7180_FLAG_V2) in adv7182_init()
820 adv7180_write(state, 0x0004, 0x17); in adv7182_init()
822 adv7180_write(state, 0x0004, 0x07); in adv7182_init()
823 adv7180_write(state, 0x0003, 0x0c); in adv7182_init()
824 adv7180_write(state, 0x001d, 0x40); in adv7182_init()
827 adv7180_write(state, 0x0013, 0x00); in adv7182_init()
832 static int adv7182_set_std(struct adv7180_state *state, unsigned int std) in adv7182_set_std() argument
834 return adv7180_write(state, ADV7182_REG_INPUT_VIDSEL, std << 4); in adv7182_set_std()
889 static int adv7182_select_input(struct adv7180_state *state, unsigned int input) in adv7182_select_input() argument
896 ret = adv7180_write(state, ADV7180_REG_INPUT_CONTROL, input); in adv7182_select_input()
901 adv7180_write(state, 0x809c, 0x00); in adv7182_select_input()
902 adv7180_write(state, 0x809c, 0xff); in adv7182_select_input()
910 adv7180_write(state, 0x0017, 0x41); in adv7182_select_input()
913 adv7180_write(state, 0x0017, 0x01); in adv7182_select_input()
917 if (state->chip_info->flags & ADV7180_FLAG_V2) in adv7182_select_input()
923 adv7180_write(state, 0x0052 + i, lbias[i]); in adv7182_select_input()
927 adv7180_write(state, 0x005f, 0xa8); in adv7182_select_input()
928 adv7180_write(state, 0x005a, 0x90); in adv7182_select_input()
929 adv7180_write(state, 0x0060, 0xb0); in adv7182_select_input()
930 adv7180_write(state, 0x80b6, 0x08); in adv7182_select_input()
931 adv7180_write(state, 0x80c0, 0xa0); in adv7182_select_input()
933 adv7180_write(state, 0x005f, 0xf0); in adv7182_select_input()
934 adv7180_write(state, 0x005a, 0xd0); in adv7182_select_input()
935 adv7180_write(state, 0x0060, 0x10); in adv7182_select_input()
936 adv7180_write(state, 0x80b6, 0x9c); in adv7182_select_input()
937 adv7180_write(state, 0x80c0, 0x00); in adv7182_select_input()
1108 static int init_device(struct adv7180_state *state) in init_device() argument
1112 mutex_lock(&state->mutex); in init_device()
1114 adv7180_write(state, ADV7180_REG_PWR_MAN, ADV7180_PWR_MAN_RES); in init_device()
1117 ret = state->chip_info->init(state); in init_device()
1121 ret = adv7180_program_std(state); in init_device()
1125 adv7180_set_field_mode(state); in init_device()
1128 if (state->irq > 0) { in init_device()
1130 ret = adv7180_write(state, ADV7180_REG_ICONF1, in init_device()
1136 ret = adv7180_write(state, ADV7180_REG_IMR1, 0); in init_device()
1140 ret = adv7180_write(state, ADV7180_REG_IMR2, 0); in init_device()
1145 ret = adv7180_write(state, ADV7180_REG_IMR3, in init_device()
1150 ret = adv7180_write(state, ADV7180_REG_IMR4, 0); in init_device()
1156 mutex_unlock(&state->mutex); in init_device()
1164 struct adv7180_state *state; in adv7180_probe() local
1175 state = devm_kzalloc(&client->dev, sizeof(*state), GFP_KERNEL); in adv7180_probe()
1176 if (state == NULL) in adv7180_probe()
1179 state->client = client; in adv7180_probe()
1180 state->field = V4L2_FIELD_INTERLACED; in adv7180_probe()
1181 state->chip_info = (struct adv7180_chip_info *)id->driver_data; in adv7180_probe()
1183 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) { in adv7180_probe()
1184 state->csi_client = i2c_new_dummy(client->adapter, in adv7180_probe()
1186 if (!state->csi_client) in adv7180_probe()
1190 if (state->chip_info->flags & ADV7180_FLAG_I2P) { in adv7180_probe()
1191 state->vpp_client = i2c_new_dummy(client->adapter, in adv7180_probe()
1193 if (!state->vpp_client) { in adv7180_probe()
1199 state->irq = client->irq; in adv7180_probe()
1200 mutex_init(&state->mutex); in adv7180_probe()
1201 state->autodetect = true; in adv7180_probe()
1202 if (state->chip_info->flags & ADV7180_FLAG_RESET_POWERED) in adv7180_probe()
1203 state->powered = true; in adv7180_probe()
1205 state->powered = false; in adv7180_probe()
1206 state->input = 0; in adv7180_probe()
1207 sd = &state->sd; in adv7180_probe()
1211 ret = adv7180_init_controls(state); in adv7180_probe()
1215 state->pad.flags = MEDIA_PAD_FL_SOURCE; in adv7180_probe()
1217 ret = media_entity_init(&sd->entity, 1, &state->pad, 0); in adv7180_probe()
1221 ret = init_device(state); in adv7180_probe()
1225 if (state->irq) { in adv7180_probe()
1228 KBUILD_MODNAME, state); in adv7180_probe()
1240 if (state->irq > 0) in adv7180_probe()
1241 free_irq(client->irq, state); in adv7180_probe()
1245 adv7180_exit_controls(state); in adv7180_probe()
1247 if (state->chip_info->flags & ADV7180_FLAG_I2P) in adv7180_probe()
1248 i2c_unregister_device(state->vpp_client); in adv7180_probe()
1250 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) in adv7180_probe()
1251 i2c_unregister_device(state->csi_client); in adv7180_probe()
1252 mutex_destroy(&state->mutex); in adv7180_probe()
1259 struct adv7180_state *state = to_state(sd); in adv7180_remove() local
1263 if (state->irq > 0) in adv7180_remove()
1264 free_irq(client->irq, state); in adv7180_remove()
1267 adv7180_exit_controls(state); in adv7180_remove()
1269 if (state->chip_info->flags & ADV7180_FLAG_I2P) in adv7180_remove()
1270 i2c_unregister_device(state->vpp_client); in adv7180_remove()
1271 if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2) in adv7180_remove()
1272 i2c_unregister_device(state->csi_client); in adv7180_remove()
1274 mutex_destroy(&state->mutex); in adv7180_remove()
1298 struct adv7180_state *state = to_state(sd); in adv7180_suspend() local
1300 return adv7180_set_power(state, false); in adv7180_suspend()
1307 struct adv7180_state *state = to_state(sd); in adv7180_resume() local
1310 ret = init_device(state); in adv7180_resume()
1314 ret = adv7180_set_power(state, state->powered); in adv7180_resume()