drivers/gpu/drm/bridge/ite-it6505.c
1026
ret = it6505_read(it6505, REG_AUX_DATA_FIFO);
drivers/gpu/drm/bridge/ite-it6505.c
1033
ret = it6505_read(it6505, REG_AUX_DATA_0_7 + i);
drivers/gpu/drm/bridge/ite-it6505.c
1051
it6505_set_bits(it6505, REG_AUX_CTRL,
drivers/gpu/drm/bridge/ite-it6505.c
1054
it6505_set_bits(it6505, REG_AUX_CTRL,
drivers/gpu/drm/bridge/ite-it6505.c
1059
it6505_set_bits(it6505, REG_AUX_CTRL, AUX_USER_MODE, 0);
drivers/gpu/drm/bridge/ite-it6505.c
1064
static ssize_t it6505_aux_do_transfer(struct it6505 *it6505,
drivers/gpu/drm/bridge/ite-it6505.c
1073
mutex_lock(&it6505->aux_lock);
drivers/gpu/drm/bridge/ite-it6505.c
1078
ret_size = it6505_aux_operation(it6505, cmd, address + i,
drivers/gpu/drm/bridge/ite-it6505.c
1091
mutex_unlock(&it6505->aux_lock);
drivers/gpu/drm/bridge/ite-it6505.c
1109
static int it6505_aux_i2c_wait(struct it6505 *it6505, u8 *reply)
drivers/gpu/drm/bridge/ite-it6505.c
1113
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
1118
if (it6505_read(it6505, REG_AUX_USER_CTRL) & AUX_EVENT)
drivers/gpu/drm/bridge/ite-it6505.c
1122
it6505_aux_op_finished(it6505));
drivers/gpu/drm/bridge/ite-it6505.c
1127
} while (!it6505_aux_op_finished(it6505));
drivers/gpu/drm/bridge/ite-it6505.c
1129
*reply = it6505_read(it6505, REG_AUX_USER_REPLY) >> 4;
drivers/gpu/drm/bridge/ite-it6505.c
1140
it6505_set_bits(it6505, REG_AUX_USER_CTRL, USER_AUX_DONE, USER_AUX_DONE);
drivers/gpu/drm/bridge/ite-it6505.c
1144
static int it6505_aux_i2c_readb(struct it6505 *it6505, u8 *buf, size_t size, u8 *reply)
drivers/gpu/drm/bridge/ite-it6505.c
1150
it6505_write(it6505, REG_AUX_CMD_REQ, CMD_AUX_GI2C_READ);
drivers/gpu/drm/bridge/ite-it6505.c
1152
ret = it6505_aux_i2c_wait(it6505, reply);
drivers/gpu/drm/bridge/ite-it6505.c
1160
buf[i] = it6505_read(it6505, REG_AUX_USER_RXB(0 + i));
drivers/gpu/drm/bridge/ite-it6505.c
1165
static int it6505_aux_i2c_writeb(struct it6505 *it6505, u8 *buf, size_t size, u8 *reply)
drivers/gpu/drm/bridge/ite-it6505.c
1171
it6505_write(it6505, REG_AUX_OUT_DATA0 + i, buf[i]);
drivers/gpu/drm/bridge/ite-it6505.c
1174
it6505_write(it6505, REG_AUX_CMD_REQ, CMD_AUX_GI2C_WRITE);
drivers/gpu/drm/bridge/ite-it6505.c
1176
ret = it6505_aux_i2c_wait(it6505, reply);
drivers/gpu/drm/bridge/ite-it6505.c
1185
static ssize_t it6505_aux_i2c_operation(struct it6505 *it6505,
drivers/gpu/drm/bridge/ite-it6505.c
1193
it6505_set_bits(it6505, REG_AUX_CTRL,
drivers/gpu/drm/bridge/ite-it6505.c
1195
it6505_set_bits(it6505, REG_AUX_USER_CTRL, EN_USER_AUX, EN_USER_AUX);
drivers/gpu/drm/bridge/ite-it6505.c
1197
it6505_set_bits(it6505, REG_AUX_CTRL,
drivers/gpu/drm/bridge/ite-it6505.c
1201
it6505_set_bits(it6505, REG_AUX_CTRL,
drivers/gpu/drm/bridge/ite-it6505.c
1204
it6505_write(it6505, REG_AUX_ADR_0_7, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1205
it6505_write(it6505, REG_AUX_ADR_8_15, msg->address << 1);
drivers/gpu/drm/bridge/ite-it6505.c
1209
it6505_write(it6505, REG_AUX_ADR_16_19, msg->request);
drivers/gpu/drm/bridge/ite-it6505.c
1210
it6505_write(it6505, REG_AUX_CMD_REQ, CMD_AUX_GI2C_ADR);
drivers/gpu/drm/bridge/ite-it6505.c
1211
ret = it6505_aux_i2c_wait(it6505, &msg->reply);
drivers/gpu/drm/bridge/ite-it6505.c
1219
it6505_write(it6505, REG_AUX_ADR_16_19,
drivers/gpu/drm/bridge/ite-it6505.c
1222
ret = it6505_aux_i2c_readb(it6505, &buffer[data_cnt],
drivers/gpu/drm/bridge/ite-it6505.c
1225
ret = it6505_aux_i2c_writeb(it6505, &buffer[data_cnt],
drivers/gpu/drm/bridge/ite-it6505.c
1236
it6505_set_bits(it6505, REG_AUX_USER_CTRL, EN_USER_AUX, 0);
drivers/gpu/drm/bridge/ite-it6505.c
1237
it6505_set_bits(it6505, REG_AUX_CTRL, AUX_USER_MODE, 0);
drivers/gpu/drm/bridge/ite-it6505.c
1244
struct it6505 *it6505 = container_of(aux, struct it6505, aux);
drivers/gpu/drm/bridge/ite-it6505.c
1246
guard(mutex)(&it6505->aux_lock);
drivers/gpu/drm/bridge/ite-it6505.c
1247
return it6505_aux_i2c_operation(it6505, msg);
drivers/gpu/drm/bridge/ite-it6505.c
1253
struct it6505 *it6505 = container_of(aux, struct it6505, aux);
drivers/gpu/drm/bridge/ite-it6505.c
1273
ret = it6505_aux_do_transfer(it6505, cmd, msg->address, msg->buffer,
drivers/gpu/drm/bridge/ite-it6505.c
1296
struct it6505 *it6505 = data;
drivers/gpu/drm/bridge/ite-it6505.c
1297
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
1301
it6505_aux_reset(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
1305
ret = it6505_aux_do_transfer(it6505, CMD_AUX_I2C_EDID_READ,
drivers/gpu/drm/bridge/ite-it6505.c
1331
static int it6505_get_ksvlist(struct it6505 *it6505, u8 *buf, size_t len)
drivers/gpu/drm/bridge/ite-it6505.c
1333
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
1341
ret = it6505_aux_do_transfer(it6505, CMD_AUX_GET_KSV_LIST,
drivers/gpu/drm/bridge/ite-it6505.c
1362
static void it6505_variable_config(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1364
it6505->link_rate_bw_code = HBR;
drivers/gpu/drm/bridge/ite-it6505.c
1365
it6505->lane_count = MAX_LANE_COUNT;
drivers/gpu/drm/bridge/ite-it6505.c
1366
it6505->link_state = LINK_IDLE;
drivers/gpu/drm/bridge/ite-it6505.c
1367
it6505->hdcp_desired = HDCP_DESIRED;
drivers/gpu/drm/bridge/ite-it6505.c
1368
it6505->auto_train_retry = AUTO_TRAIN_RETRY;
drivers/gpu/drm/bridge/ite-it6505.c
1369
it6505->audio.select = AUDIO_SELECT;
drivers/gpu/drm/bridge/ite-it6505.c
1370
it6505->audio.sample_rate = AUDIO_SAMPLE_RATE;
drivers/gpu/drm/bridge/ite-it6505.c
1371
it6505->audio.channel_count = AUDIO_CHANNEL_COUNT;
drivers/gpu/drm/bridge/ite-it6505.c
1372
it6505->audio.type = AUDIO_TYPE;
drivers/gpu/drm/bridge/ite-it6505.c
1373
it6505->audio.i2s_input_format = I2S_INPUT_FORMAT;
drivers/gpu/drm/bridge/ite-it6505.c
1374
it6505->audio.i2s_justified = I2S_JUSTIFIED;
drivers/gpu/drm/bridge/ite-it6505.c
1375
it6505->audio.i2s_data_delay = I2S_DATA_DELAY;
drivers/gpu/drm/bridge/ite-it6505.c
1376
it6505->audio.i2s_ws_channel = I2S_WS_CHANNEL;
drivers/gpu/drm/bridge/ite-it6505.c
1377
it6505->audio.i2s_data_sequence = I2S_DATA_SEQUENCE;
drivers/gpu/drm/bridge/ite-it6505.c
1378
it6505->audio.word_length = AUDIO_WORD_LENGTH;
drivers/gpu/drm/bridge/ite-it6505.c
1379
memset(it6505->sha1_input, 0, sizeof(it6505->sha1_input));
drivers/gpu/drm/bridge/ite-it6505.c
1380
memset(it6505->bksvs, 0, sizeof(it6505->bksvs));
drivers/gpu/drm/bridge/ite-it6505.c
1383
static int it6505_send_video_infoframe(struct it6505 *it6505,
drivers/gpu/drm/bridge/ite-it6505.c
1388
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
1396
err = it6505_set_bits(it6505, REG_INFOFRAME_CTRL, EN_AVI_PKT, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1400
err = regmap_bulk_write(it6505->regmap, REG_AVI_INFO_DB1,
drivers/gpu/drm/bridge/ite-it6505.c
1406
err = it6505_set_bits(it6505, REG_INFOFRAME_CTRL, EN_AVI_PKT,
drivers/gpu/drm/bridge/ite-it6505.c
1414
static void it6505_get_extcon_property(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1418
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
1420
if (it6505->extcon && !it6505->lane_swap_disabled) {
drivers/gpu/drm/bridge/ite-it6505.c
1421
err = extcon_get_property(it6505->extcon, EXTCON_DISP_DP,
drivers/gpu/drm/bridge/ite-it6505.c
1428
it6505->lane_swap = property.intval;
drivers/gpu/drm/bridge/ite-it6505.c
1432
static void it6505_clk_phase_adjustment(struct it6505 *it6505,
drivers/gpu/drm/bridge/ite-it6505.c
1437
it6505_set_bits(it6505, REG_CLK_CTRL0, M_PCLK_DELAY,
drivers/gpu/drm/bridge/ite-it6505.c
1439
it6505_set_bits(it6505, REG_DATA_CTRL0, VIDEO_LATCH_EDGE,
drivers/gpu/drm/bridge/ite-it6505.c
1443
static void it6505_link_reset_step_train(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1445
it6505_set_bits(it6505, REG_TRAIN_CTRL0,
drivers/gpu/drm/bridge/ite-it6505.c
1447
it6505_dpcd_write(it6505, DP_TRAINING_PATTERN_SET,
drivers/gpu/drm/bridge/ite-it6505.c
1451
static void it6505_init(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1453
it6505_write(it6505, REG_AUX_OPT, AUX_AUTO_RST | AUX_FIX_FREQ);
drivers/gpu/drm/bridge/ite-it6505.c
1454
it6505_write(it6505, REG_AUX_CTRL, AUX_NO_SEGMENT_WR);
drivers/gpu/drm/bridge/ite-it6505.c
1455
it6505_write(it6505, REG_HDCP_CTRL2, HDCP_AN_SEL | HDCP_HW_HPDIRQ_ACT);
drivers/gpu/drm/bridge/ite-it6505.c
1456
it6505_write(it6505, REG_VID_BUS_CTRL0, IN_DDR | DDR_CD);
drivers/gpu/drm/bridge/ite-it6505.c
1457
it6505_write(it6505, REG_VID_BUS_CTRL1, 0x01);
drivers/gpu/drm/bridge/ite-it6505.c
1458
it6505_write(it6505, REG_AUDIO_CTRL0, AUDIO_16B_BOUND);
drivers/gpu/drm/bridge/ite-it6505.c
1461
it6505_write(it6505, REG_HPD_IRQ_TIME, 0xF5);
drivers/gpu/drm/bridge/ite-it6505.c
1462
it6505_write(it6505, REG_AUX_DEBUG_MODE, 0x4D);
drivers/gpu/drm/bridge/ite-it6505.c
1463
it6505_write(it6505, REG_AUX_OPT2, 0x17);
drivers/gpu/drm/bridge/ite-it6505.c
1464
it6505_write(it6505, REG_HDCP_OPT, 0x60);
drivers/gpu/drm/bridge/ite-it6505.c
1465
it6505_write(it6505, REG_DATA_MUTE_CTRL,
drivers/gpu/drm/bridge/ite-it6505.c
1467
it6505_write(it6505, REG_TIME_STMP_CTRL,
drivers/gpu/drm/bridge/ite-it6505.c
1469
it6505_write(it6505, REG_INFOFRAME_CTRL, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1470
it6505_write(it6505, REG_DRV_0_DB_800_MV,
drivers/gpu/drm/bridge/ite-it6505.c
1471
afe_setting_table[it6505->afe_setting][0]);
drivers/gpu/drm/bridge/ite-it6505.c
1472
it6505_write(it6505, REG_PRE_0_DB_800_MV,
drivers/gpu/drm/bridge/ite-it6505.c
1473
afe_setting_table[it6505->afe_setting][1]);
drivers/gpu/drm/bridge/ite-it6505.c
1474
it6505_write(it6505, REG_PRE_3P5_DB_800_MV,
drivers/gpu/drm/bridge/ite-it6505.c
1475
afe_setting_table[it6505->afe_setting][2]);
drivers/gpu/drm/bridge/ite-it6505.c
1476
it6505_write(it6505, REG_SSC_CTRL0, 0x9E);
drivers/gpu/drm/bridge/ite-it6505.c
1477
it6505_write(it6505, REG_SSC_CTRL1, 0x1C);
drivers/gpu/drm/bridge/ite-it6505.c
1478
it6505_write(it6505, REG_SSC_CTRL2, 0x42);
drivers/gpu/drm/bridge/ite-it6505.c
1481
static void it6505_video_disable(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1483
it6505_set_bits(it6505, REG_DATA_MUTE_CTRL, EN_VID_MUTE, EN_VID_MUTE);
drivers/gpu/drm/bridge/ite-it6505.c
1484
it6505_set_bits(it6505, REG_INFOFRAME_CTRL, EN_VID_CTRL_PKT, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1485
it6505_set_bits(it6505, REG_RESET_CTRL, VIDEO_RESET, VIDEO_RESET);
drivers/gpu/drm/bridge/ite-it6505.c
1488
static void it6505_video_reset(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1490
it6505_link_reset_step_train(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
1491
it6505_set_bits(it6505, REG_DATA_MUTE_CTRL, EN_VID_MUTE, EN_VID_MUTE);
drivers/gpu/drm/bridge/ite-it6505.c
1492
it6505_set_bits(it6505, REG_INFOFRAME_CTRL, EN_VID_CTRL_PKT, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1494
it6505_set_bits(it6505, REG_VID_BUS_CTRL1, TX_FIFO_RESET, TX_FIFO_RESET);
drivers/gpu/drm/bridge/ite-it6505.c
1495
it6505_set_bits(it6505, REG_VID_BUS_CTRL1, TX_FIFO_RESET, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1497
it6505_set_bits(it6505, REG_501_FIFO_CTRL, RST_501_FIFO, RST_501_FIFO);
drivers/gpu/drm/bridge/ite-it6505.c
1498
it6505_set_bits(it6505, REG_501_FIFO_CTRL, RST_501_FIFO, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1500
it6505_set_bits(it6505, REG_RESET_CTRL, VIDEO_RESET, VIDEO_RESET);
drivers/gpu/drm/bridge/ite-it6505.c
1502
it6505_set_bits(it6505, REG_RESET_CTRL, VIDEO_RESET, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1505
static void it6505_update_video_parameter(struct it6505 *it6505,
drivers/gpu/drm/bridge/ite-it6505.c
1508
it6505_clk_phase_adjustment(it6505, mode);
drivers/gpu/drm/bridge/ite-it6505.c
1509
it6505_video_disable(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
1512
static bool it6505_audio_input(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1516
reg05 = it6505_read(it6505, REG_RESET_CTRL);
drivers/gpu/drm/bridge/ite-it6505.c
1517
it6505_set_bits(it6505, REG_RESET_CTRL, AUDIO_RESET, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1519
regbe = it6505_read(it6505, REG_AUDIO_INPUT_FREQ);
drivers/gpu/drm/bridge/ite-it6505.c
1520
it6505_write(it6505, REG_RESET_CTRL, reg05);
drivers/gpu/drm/bridge/ite-it6505.c
1525
static void it6505_setup_audio_channel_status(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1527
enum it6505_audio_sample_rate sample_rate = it6505->audio.sample_rate;
drivers/gpu/drm/bridge/ite-it6505.c
1531
it6505_write(it6505, REG_IEC958_STS0, it6505->audio.type << 1);
drivers/gpu/drm/bridge/ite-it6505.c
1532
it6505_write(it6505, REG_IEC958_STS1, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1533
it6505_write(it6505, REG_IEC958_STS2, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1534
it6505_write(it6505, REG_IEC958_STS3, sample_rate);
drivers/gpu/drm/bridge/ite-it6505.c
1535
it6505_write(it6505, REG_IEC958_STS4, (~sample_rate << 4) |
drivers/gpu/drm/bridge/ite-it6505.c
1536
audio_word_length_map[it6505->audio.word_length]);
drivers/gpu/drm/bridge/ite-it6505.c
1539
static void it6505_setup_audio_format(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1542
it6505_write(it6505, REG_AUDIO_FMT,
drivers/gpu/drm/bridge/ite-it6505.c
1543
(it6505->audio.word_length << 5) |
drivers/gpu/drm/bridge/ite-it6505.c
1544
(it6505->audio.i2s_data_sequence << 4) |
drivers/gpu/drm/bridge/ite-it6505.c
1545
(it6505->audio.i2s_ws_channel << 3) |
drivers/gpu/drm/bridge/ite-it6505.c
1546
(it6505->audio.i2s_data_delay << 2) |
drivers/gpu/drm/bridge/ite-it6505.c
1547
(it6505->audio.i2s_justified << 1) |
drivers/gpu/drm/bridge/ite-it6505.c
1548
it6505->audio.i2s_input_format);
drivers/gpu/drm/bridge/ite-it6505.c
1549
if (it6505->audio.select == SPDIF) {
drivers/gpu/drm/bridge/ite-it6505.c
1550
it6505_write(it6505, REG_AUDIO_FIFO_SEL, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1552
it6505_set_bits(it6505, REG_AUX_OPT, 0xF0, 0x30);
drivers/gpu/drm/bridge/ite-it6505.c
1554
it6505_write(it6505, REG_AUDIO_FIFO_SEL, 0xE4);
drivers/gpu/drm/bridge/ite-it6505.c
1557
it6505_write(it6505, REG_AUDIO_CTRL0, 0x20);
drivers/gpu/drm/bridge/ite-it6505.c
1558
it6505_write(it6505, REG_AUDIO_CTRL1, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1561
static void it6505_enable_audio_source(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1565
audio_source_count = BIT(DIV_ROUND_UP(it6505->audio.channel_count, 2))
drivers/gpu/drm/bridge/ite-it6505.c
1568
audio_source_count |= it6505->audio.select << 4;
drivers/gpu/drm/bridge/ite-it6505.c
1570
it6505_write(it6505, REG_AUDIO_SRC_CTRL, audio_source_count);
drivers/gpu/drm/bridge/ite-it6505.c
1573
static void it6505_enable_audio_infoframe(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1575
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
1579
audio_info_ca[it6505->audio.channel_count - 1]);
drivers/gpu/drm/bridge/ite-it6505.c
1581
it6505_write(it6505, REG_AUD_INFOFRAM_DB1, it6505->audio.channel_count
drivers/gpu/drm/bridge/ite-it6505.c
1583
it6505_write(it6505, REG_AUD_INFOFRAM_DB2, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1584
it6505_write(it6505, REG_AUD_INFOFRAM_DB3,
drivers/gpu/drm/bridge/ite-it6505.c
1585
audio_info_ca[it6505->audio.channel_count - 1]);
drivers/gpu/drm/bridge/ite-it6505.c
1586
it6505_write(it6505, REG_AUD_INFOFRAM_DB4, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1587
it6505_write(it6505, REG_AUD_INFOFRAM_SUM, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1590
it6505_set_bits(it6505, REG_INFOFRAME_CTRL, EN_AUD_CTRL_PKT,
drivers/gpu/drm/bridge/ite-it6505.c
1594
static void it6505_disable_audio(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1596
it6505_set_bits(it6505, REG_DATA_MUTE_CTRL, EN_AUD_MUTE, EN_AUD_MUTE);
drivers/gpu/drm/bridge/ite-it6505.c
1597
it6505_set_bits(it6505, REG_AUDIO_SRC_CTRL, M_AUDIO_I2S_EN, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1598
it6505_set_bits(it6505, REG_INFOFRAME_CTRL, EN_AUD_CTRL_PKT, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1599
it6505_set_bits(it6505, REG_RESET_CTRL, AUDIO_RESET, AUDIO_RESET);
drivers/gpu/drm/bridge/ite-it6505.c
1602
static void it6505_enable_audio(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1604
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
1608
it6505_disable_audio(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
1610
it6505_setup_audio_channel_status(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
1611
it6505_setup_audio_format(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
1612
it6505_enable_audio_source(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
1613
it6505_enable_audio_infoframe(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
1615
it6505_write(it6505, REG_AUDIO_N_0_7, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1616
it6505_write(it6505, REG_AUDIO_N_8_15, 0x80);
drivers/gpu/drm/bridge/ite-it6505.c
1617
it6505_write(it6505, REG_AUDIO_N_16_23, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1619
it6505_set_bits(it6505, REG_AUDIO_SRC_CTRL, AUDIO_FIFO_RESET,
drivers/gpu/drm/bridge/ite-it6505.c
1621
it6505_set_bits(it6505, REG_AUDIO_SRC_CTRL, AUDIO_FIFO_RESET, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1622
it6505_set_bits(it6505, REG_RESET_CTRL, AUDIO_RESET, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1623
regbe = it6505_read(it6505, REG_AUDIO_INPUT_FREQ);
drivers/gpu/drm/bridge/ite-it6505.c
1626
it6505_set_bits(it6505, REG_DATA_MUTE_CTRL, EN_AUD_MUTE, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1629
static bool it6505_use_step_train_check(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1631
if (it6505->link.revision >= 0x12)
drivers/gpu/drm/bridge/ite-it6505.c
1632
return it6505->dpcd[DP_TRAINING_AUX_RD_INTERVAL] >= 0x01;
drivers/gpu/drm/bridge/ite-it6505.c
1637
static void it6505_parse_link_capabilities(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1639
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
1640
struct it6505_drm_dp_link *link = &it6505->link;
drivers/gpu/drm/bridge/ite-it6505.c
1643
if (it6505->dpcd[0] == 0) {
drivers/gpu/drm/bridge/ite-it6505.c
1650
link->revision = it6505->dpcd[0];
drivers/gpu/drm/bridge/ite-it6505.c
1651
link->rate = drm_dp_bw_code_to_link_rate(it6505->dpcd[1]);
drivers/gpu/drm/bridge/ite-it6505.c
1652
link->num_lanes = it6505->dpcd[2] & DP_MAX_LANE_COUNT_MASK;
drivers/gpu/drm/bridge/ite-it6505.c
1654
if (it6505->dpcd[2] & DP_ENHANCED_FRAME_CAP)
drivers/gpu/drm/bridge/ite-it6505.c
1663
it6505->link_rate_bw_code = drm_dp_link_rate_to_bw_code(link->rate);
drivers/gpu/drm/bridge/ite-it6505.c
1665
it6505->link_rate_bw_code);
drivers/gpu/drm/bridge/ite-it6505.c
1666
it6505->link_rate_bw_code = min_t(int, it6505->link_rate_bw_code,
drivers/gpu/drm/bridge/ite-it6505.c
1669
it6505->lane_count = link->num_lanes;
drivers/gpu/drm/bridge/ite-it6505.c
1671
it6505->lane_count);
drivers/gpu/drm/bridge/ite-it6505.c
1672
it6505->lane_count = min_t(int, it6505->lane_count,
drivers/gpu/drm/bridge/ite-it6505.c
1673
it6505->max_lane_count);
drivers/gpu/drm/bridge/ite-it6505.c
1675
it6505->branch_device = drm_dp_is_branch(it6505->dpcd);
drivers/gpu/drm/bridge/ite-it6505.c
1677
it6505->branch_device ? "" : "Not ");
drivers/gpu/drm/bridge/ite-it6505.c
1679
it6505->enable_enhanced_frame = link->capabilities;
drivers/gpu/drm/bridge/ite-it6505.c
1681
it6505->enable_enhanced_frame ? "" : "Not ");
drivers/gpu/drm/bridge/ite-it6505.c
1683
it6505->enable_ssc = (it6505->dpcd[DP_MAX_DOWNSPREAD] &
drivers/gpu/drm/bridge/ite-it6505.c
1686
it6505->enable_ssc ? "0.5" : "0",
drivers/gpu/drm/bridge/ite-it6505.c
1687
it6505->enable_ssc ? "" : "Not ");
drivers/gpu/drm/bridge/ite-it6505.c
1689
it6505->step_train = it6505_use_step_train_check(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
1690
if (it6505->step_train)
drivers/gpu/drm/bridge/ite-it6505.c
1693
bcaps = it6505_dpcd_read(it6505, DP_AUX_HDCP_BCAPS);
drivers/gpu/drm/bridge/ite-it6505.c
1696
it6505->is_repeater = (bcaps & DP_BCAPS_REPEATER_PRESENT);
drivers/gpu/drm/bridge/ite-it6505.c
1698
it6505->is_repeater ? "repeater" :
drivers/gpu/drm/bridge/ite-it6505.c
1702
it6505->hdcp_desired = false;
drivers/gpu/drm/bridge/ite-it6505.c
1705
it6505->hdcp_desired ? "desired" : "undesired");
drivers/gpu/drm/bridge/ite-it6505.c
1708
static void it6505_setup_ssc(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1710
it6505_set_bits(it6505, REG_TRAIN_CTRL0, SPREAD_AMP_5,
drivers/gpu/drm/bridge/ite-it6505.c
1711
it6505->enable_ssc ? SPREAD_AMP_5 : 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1712
if (it6505->enable_ssc) {
drivers/gpu/drm/bridge/ite-it6505.c
1713
it6505_write(it6505, REG_SSC_CTRL0, 0x9E);
drivers/gpu/drm/bridge/ite-it6505.c
1714
it6505_write(it6505, REG_SSC_CTRL1, 0x1C);
drivers/gpu/drm/bridge/ite-it6505.c
1715
it6505_write(it6505, REG_SSC_CTRL2, 0x42);
drivers/gpu/drm/bridge/ite-it6505.c
1716
it6505_write(it6505, REG_SP_CTRL0, 0x07);
drivers/gpu/drm/bridge/ite-it6505.c
1717
it6505_write(it6505, REG_IP_CTRL1, 0x29);
drivers/gpu/drm/bridge/ite-it6505.c
1718
it6505_write(it6505, REG_IP_CTRL2, 0x03);
drivers/gpu/drm/bridge/ite-it6505.c
1720
it6505_set_bits(it6505, REG_TIME_STMP_CTRL, M_STAMP_STEP,
drivers/gpu/drm/bridge/ite-it6505.c
1722
it6505_dpcd_write(it6505, DP_DOWNSPREAD_CTRL,
drivers/gpu/drm/bridge/ite-it6505.c
1725
it6505_dpcd_write(it6505, DP_DOWNSPREAD_CTRL, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1726
it6505_set_bits(it6505, REG_TIME_STMP_CTRL, M_STAMP_STEP,
drivers/gpu/drm/bridge/ite-it6505.c
1731
static inline void it6505_link_rate_setup(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1733
it6505_set_bits(it6505, REG_TRAIN_CTRL0, FORCE_LBR,
drivers/gpu/drm/bridge/ite-it6505.c
1734
(it6505->link_rate_bw_code == RBR) ? FORCE_LBR : 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1735
it6505_set_bits(it6505, REG_LINK_DRV, DRV_HS,
drivers/gpu/drm/bridge/ite-it6505.c
1736
(it6505->link_rate_bw_code == RBR) ? 0x00 : DRV_HS);
drivers/gpu/drm/bridge/ite-it6505.c
1739
static void it6505_lane_count_setup(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1741
it6505_get_extcon_property(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
1742
it6505_set_bits(it6505, REG_TRAIN_CTRL0, LANE_SWAP,
drivers/gpu/drm/bridge/ite-it6505.c
1743
it6505->lane_swap ? LANE_SWAP : 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1744
it6505_set_bits(it6505, REG_TRAIN_CTRL0, LANE_COUNT_MASK,
drivers/gpu/drm/bridge/ite-it6505.c
1745
(it6505->lane_count - 1) << 1);
drivers/gpu/drm/bridge/ite-it6505.c
1748
static void it6505_link_training_setup(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1750
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
1752
if (it6505->enable_enhanced_frame)
drivers/gpu/drm/bridge/ite-it6505.c
1753
it6505_set_bits(it6505, REG_DATA_MUTE_CTRL,
drivers/gpu/drm/bridge/ite-it6505.c
1756
it6505_link_rate_setup(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
1757
it6505_lane_count_setup(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
1758
it6505_setup_ssc(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
1761
it6505->link_rate_bw_code != RBR ? "HBR" : "RBR",
drivers/gpu/drm/bridge/ite-it6505.c
1762
it6505->lane_count,
drivers/gpu/drm/bridge/ite-it6505.c
1763
it6505->enable_ssc ? "en" : "dis",
drivers/gpu/drm/bridge/ite-it6505.c
1764
it6505->enable_enhanced_frame ? "en" : "dis");
drivers/gpu/drm/bridge/ite-it6505.c
1767
static bool it6505_link_start_auto_train(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1772
mutex_lock(&it6505->aux_lock);
drivers/gpu/drm/bridge/ite-it6505.c
1773
it6505_set_bits(it6505, REG_TRAIN_CTRL0,
drivers/gpu/drm/bridge/ite-it6505.c
1775
it6505_write(it6505, REG_TRAIN_CTRL1, FORCE_RETRAIN);
drivers/gpu/drm/bridge/ite-it6505.c
1776
it6505_write(it6505, REG_TRAIN_CTRL1, AUTO_TRAIN);
drivers/gpu/drm/bridge/ite-it6505.c
1780
link_training_state = it6505_read(it6505, REG_LINK_TRAIN_STS);
drivers/gpu/drm/bridge/ite-it6505.c
1791
mutex_unlock(&it6505->aux_lock);
drivers/gpu/drm/bridge/ite-it6505.c
1796
static int it6505_drm_dp_link_configure(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
1800
struct drm_dp_aux *aux = &it6505->aux;
drivers/gpu/drm/bridge/ite-it6505.c
1802
values[0] = it6505->link_rate_bw_code;
drivers/gpu/drm/bridge/ite-it6505.c
1803
values[1] = it6505->lane_count;
drivers/gpu/drm/bridge/ite-it6505.c
1805
if (it6505->enable_enhanced_frame)
drivers/gpu/drm/bridge/ite-it6505.c
1839
step_train_lane_voltage_para_set(struct it6505 *it6505,
drivers/gpu/drm/bridge/ite-it6505.c
1848
for (i = 0; i < it6505->lane_count; i++) {
drivers/gpu/drm/bridge/ite-it6505.c
1861
it6505_dpcd_write(it6505, DP_TRAINING_LANE0_SET + i,
drivers/gpu/drm/bridge/ite-it6505.c
1865
it6505_dpcd_read(it6505, DP_TRAINING_LANE0_SET + i))
drivers/gpu/drm/bridge/ite-it6505.c
1873
it6505_step_cr_train(struct it6505 *it6505,
drivers/gpu/drm/bridge/ite-it6505.c
1880
const struct drm_dp_aux *aux = &it6505->aux;
drivers/gpu/drm/bridge/ite-it6505.c
1882
it6505_dpcd_write(it6505, DP_DOWNSPREAD_CTRL,
drivers/gpu/drm/bridge/ite-it6505.c
1883
it6505->enable_ssc ? DP_SPREAD_AMP_0_5 : 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
1884
it6505_dpcd_write(it6505, DP_TRAINING_PATTERN_SET,
drivers/gpu/drm/bridge/ite-it6505.c
1889
if (!step_train_lane_voltage_para_set(it6505,
drivers/gpu/drm/bridge/ite-it6505.c
1893
drm_dp_link_train_clock_recovery_delay(aux, it6505->dpcd);
drivers/gpu/drm/bridge/ite-it6505.c
1894
drm_dp_dpcd_read_link_status(&it6505->aux, link_status);
drivers/gpu/drm/bridge/ite-it6505.c
1896
if (drm_dp_clock_recovery_ok(link_status, it6505->lane_count)) {
drivers/gpu/drm/bridge/ite-it6505.c
1897
it6505_set_bits(it6505, REG_TRAIN_CTRL0, FORCE_CR_DONE,
drivers/gpu/drm/bridge/ite-it6505.c
1901
DRM_DEV_DEBUG_DRIVER(it6505->dev, "cr not done");
drivers/gpu/drm/bridge/ite-it6505.c
1904
it6505->lane_count))
drivers/gpu/drm/bridge/ite-it6505.c
1907
for (j = 0; j < it6505->lane_count; j++) {
drivers/gpu/drm/bridge/ite-it6505.c
1940
it6505_dpcd_write(it6505, DP_TRAINING_PATTERN_SET,
drivers/gpu/drm/bridge/ite-it6505.c
1947
it6505_step_eq_train(struct it6505 *it6505,
drivers/gpu/drm/bridge/ite-it6505.c
1952
const struct drm_dp_aux *aux = &it6505->aux;
drivers/gpu/drm/bridge/ite-it6505.c
1954
it6505_dpcd_write(it6505, DP_TRAINING_PATTERN_SET,
drivers/gpu/drm/bridge/ite-it6505.c
1960
if (!step_train_lane_voltage_para_set(it6505,
drivers/gpu/drm/bridge/ite-it6505.c
1965
drm_dp_link_train_channel_eq_delay(aux, it6505->dpcd);
drivers/gpu/drm/bridge/ite-it6505.c
1966
drm_dp_dpcd_read_link_status(&it6505->aux, link_status);
drivers/gpu/drm/bridge/ite-it6505.c
1968
if (!drm_dp_clock_recovery_ok(link_status, it6505->lane_count))
drivers/gpu/drm/bridge/ite-it6505.c
1971
if (drm_dp_channel_eq_ok(link_status, it6505->lane_count)) {
drivers/gpu/drm/bridge/ite-it6505.c
1972
it6505_dpcd_write(it6505, DP_TRAINING_PATTERN_SET,
drivers/gpu/drm/bridge/ite-it6505.c
1974
it6505_set_bits(it6505, REG_TRAIN_CTRL0, FORCE_EQ_DONE,
drivers/gpu/drm/bridge/ite-it6505.c
1978
DRM_DEV_DEBUG_DRIVER(it6505->dev, "eq not done");
drivers/gpu/drm/bridge/ite-it6505.c
1980
for (i = 0; i < it6505->lane_count; i++) {
drivers/gpu/drm/bridge/ite-it6505.c
2000
it6505_dpcd_write(it6505, DP_TRAINING_PATTERN_SET,
drivers/gpu/drm/bridge/ite-it6505.c
2005
static bool it6505_link_start_step_train(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2013
DRM_DEV_DEBUG_DRIVER(it6505->dev, "start");
drivers/gpu/drm/bridge/ite-it6505.c
2014
err = it6505_drm_dp_link_configure(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2018
if (!it6505_step_cr_train(it6505, &lane_voltage_pre_emphasis))
drivers/gpu/drm/bridge/ite-it6505.c
2020
if (!it6505_step_eq_train(it6505, &lane_voltage_pre_emphasis))
drivers/gpu/drm/bridge/ite-it6505.c
2025
static bool it6505_get_video_status(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2029
reg_0d = it6505_read(it6505, REG_SYSTEM_STS);
drivers/gpu/drm/bridge/ite-it6505.c
2037
static void it6505_reset_hdcp(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2039
it6505->hdcp_status = HDCP_AUTH_IDLE;
drivers/gpu/drm/bridge/ite-it6505.c
2041
it6505_set_bits(it6505, REG_HDCP_CTRL1, HDCP_CP_ENABLE, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
2042
it6505_set_bits(it6505, REG_RESET_CTRL, HDCP_RESET, HDCP_RESET);
drivers/gpu/drm/bridge/ite-it6505.c
2045
static void it6505_start_hdcp(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2047
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2050
it6505_reset_hdcp(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2051
queue_delayed_work(system_percpu_wq, &it6505->hdcp_work,
drivers/gpu/drm/bridge/ite-it6505.c
2055
static void it6505_stop_hdcp(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2057
it6505_reset_hdcp(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2058
cancel_delayed_work(&it6505->hdcp_work);
drivers/gpu/drm/bridge/ite-it6505.c
2073
static void it6505_hdcp_part1_auth(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2075
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2078
it6505_set_bits(it6505, REG_RESET_CTRL, HDCP_RESET, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
2080
it6505_set_bits(it6505, REG_HDCP_CTRL1, HDCP_CP_ENABLE, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
2083
hdcp_bcaps = it6505_dpcd_read(it6505, DP_AUX_HDCP_BCAPS);
drivers/gpu/drm/bridge/ite-it6505.c
2091
it6505_set_bits(it6505, REG_HDCP_TRIGGER,
drivers/gpu/drm/bridge/ite-it6505.c
2096
it6505_set_bits(it6505, REG_HDCP_CTRL2, HDCP_AN_GEN, HDCP_AN_GEN);
drivers/gpu/drm/bridge/ite-it6505.c
2100
it6505_set_bits(it6505, REG_HDCP_CTRL2, HDCP_AN_GEN, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
2102
it6505_set_bits(it6505, REG_HDCP_CTRL1, HDCP_CP_ENABLE, HDCP_CP_ENABLE);
drivers/gpu/drm/bridge/ite-it6505.c
2104
it6505_set_bits(it6505, REG_HDCP_TRIGGER, HDCP_TRIGGER_START,
drivers/gpu/drm/bridge/ite-it6505.c
2107
it6505->hdcp_status = HDCP_AUTH_GOING;
drivers/gpu/drm/bridge/ite-it6505.c
2110
static int it6505_setup_sha1_input(struct it6505 *it6505, u8 *sha1_input)
drivers/gpu/drm/bridge/ite-it6505.c
2112
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2116
err = it6505_get_dpcd(it6505, DP_AUX_HDCP_BINFO, binfo,
drivers/gpu/drm/bridge/ite-it6505.c
2139
err = it6505_get_ksvlist(it6505, sha1_input, down_stream_count * 5);
drivers/gpu/drm/bridge/ite-it6505.c
2145
it6505->hdcp_down_stream_count = down_stream_count;
drivers/gpu/drm/bridge/ite-it6505.c
2149
it6505_set_bits(it6505, REG_HDCP_CTRL2, HDCP_EN_M0_READ,
drivers/gpu/drm/bridge/ite-it6505.c
2152
err = regmap_bulk_read(it6505->regmap, REG_M0_0_7,
drivers/gpu/drm/bridge/ite-it6505.c
2155
it6505_set_bits(it6505, REG_HDCP_CTRL2, HDCP_EN_M0_READ, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
2167
static bool it6505_hdcp_part2_ksvlist_check(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2169
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2173
i = it6505_setup_sha1_input(it6505, it6505->sha1_input);
drivers/gpu/drm/bridge/ite-it6505.c
2179
sha1(it6505->sha1_input, i, (u8 *)av);
drivers/gpu/drm/bridge/ite-it6505.c
2182
err = it6505_get_dpcd(it6505, DP_AUX_HDCP_V_PRIME(0), (u8 *)bv,
drivers/gpu/drm/bridge/ite-it6505.c
2207
struct it6505 *it6505 = container_of(work, struct it6505,
drivers/gpu/drm/bridge/ite-it6505.c
2209
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2217
if (!it6505_get_sink_hpd_status(it6505))
drivers/gpu/drm/bridge/ite-it6505.c
2220
bstatus = it6505_dpcd_read(it6505, DP_AUX_HDCP_BSTATUS);
drivers/gpu/drm/bridge/ite-it6505.c
2233
ksv_list_check = it6505_hdcp_part2_ksvlist_check(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2241
it6505_start_hdcp(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2246
struct it6505 *it6505 = container_of(work, struct it6505,
drivers/gpu/drm/bridge/ite-it6505.c
2248
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2254
if (!it6505_get_sink_hpd_status(it6505))
drivers/gpu/drm/bridge/ite-it6505.c
2257
ret = drm_dp_dpcd_read_link_status(&it6505->aux, link_status);
drivers/gpu/drm/bridge/ite-it6505.c
2261
if (ret < 0 || !drm_dp_channel_eq_ok(link_status, it6505->lane_count) ||
drivers/gpu/drm/bridge/ite-it6505.c
2262
!it6505_get_video_status(it6505)) {
drivers/gpu/drm/bridge/ite-it6505.c
2267
ret = it6505_get_dpcd(it6505, DP_AUX_HDCP_BKSV, it6505->bksvs,
drivers/gpu/drm/bridge/ite-it6505.c
2268
ARRAY_SIZE(it6505->bksvs));
drivers/gpu/drm/bridge/ite-it6505.c
2271
it6505_set_bits(it6505, REG_HDCP_TRIGGER,
drivers/gpu/drm/bridge/ite-it6505.c
2276
(int)ARRAY_SIZE(it6505->bksvs), it6505->bksvs);
drivers/gpu/drm/bridge/ite-it6505.c
2278
if (!it6505_hdcp_is_ksv_valid(it6505->bksvs)) {
drivers/gpu/drm/bridge/ite-it6505.c
2280
it6505_set_bits(it6505, REG_HDCP_TRIGGER,
drivers/gpu/drm/bridge/ite-it6505.c
2284
it6505_hdcp_part1_auth(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2287
static void it6505_show_hdcp_info(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2289
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2291
u8 *sha1 = it6505->sha1_input;
drivers/gpu/drm/bridge/ite-it6505.c
2294
it6505->hdcp_status, it6505->is_repeater);
drivers/gpu/drm/bridge/ite-it6505.c
2296
(int)ARRAY_SIZE(it6505->bksvs), it6505->bksvs);
drivers/gpu/drm/bridge/ite-it6505.c
2298
if (it6505->is_repeater) {
drivers/gpu/drm/bridge/ite-it6505.c
2300
it6505->hdcp_down_stream_count);
drivers/gpu/drm/bridge/ite-it6505.c
2302
(int)ARRAY_SIZE(it6505->sha1_input),
drivers/gpu/drm/bridge/ite-it6505.c
2303
it6505->sha1_input);
drivers/gpu/drm/bridge/ite-it6505.c
2304
for (i = 0; i < it6505->hdcp_down_stream_count; i++) {
drivers/gpu/drm/bridge/ite-it6505.c
2314
static void it6505_stop_link_train(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2316
it6505->link_state = LINK_IDLE;
drivers/gpu/drm/bridge/ite-it6505.c
2317
cancel_work_sync(&it6505->link_works);
drivers/gpu/drm/bridge/ite-it6505.c
2318
it6505_write(it6505, REG_TRAIN_CTRL1, FORCE_RETRAIN);
drivers/gpu/drm/bridge/ite-it6505.c
2321
static void it6505_link_train_ok(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2323
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2325
it6505->link_state = LINK_OK;
drivers/gpu/drm/bridge/ite-it6505.c
2327
it6505_set_bits(it6505, REG_DATA_MUTE_CTRL, EN_VID_MUTE, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
2328
it6505_set_bits(it6505, REG_INFOFRAME_CTRL,
drivers/gpu/drm/bridge/ite-it6505.c
2331
if (it6505_audio_input(it6505)) {
drivers/gpu/drm/bridge/ite-it6505.c
2333
it6505_enable_audio(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2336
if (it6505->hdcp_desired)
drivers/gpu/drm/bridge/ite-it6505.c
2337
it6505_start_hdcp(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2340
static void it6505_link_step_train_process(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2342
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2347
if (it6505->sink_count == 0) {
drivers/gpu/drm/bridge/ite-it6505.c
2349
it6505->sink_count);
drivers/gpu/drm/bridge/ite-it6505.c
2350
it6505_set_bits(it6505, REG_TRAIN_CTRL0, FORCE_EQ_DONE,
drivers/gpu/drm/bridge/ite-it6505.c
2355
if (!it6505->step_train) {
drivers/gpu/drm/bridge/ite-it6505.c
2362
it6505_link_reset_step_train(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2363
ret = it6505_link_start_step_train(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2367
it6505_link_train_ok(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2373
it6505->link_state = LINK_IDLE;
drivers/gpu/drm/bridge/ite-it6505.c
2374
it6505_video_reset(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2379
struct it6505 *it6505 = container_of(work, struct it6505, link_works);
drivers/gpu/drm/bridge/ite-it6505.c
2380
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2384
it6505->sink_count);
drivers/gpu/drm/bridge/ite-it6505.c
2386
if (!it6505_get_sink_hpd_status(it6505))
drivers/gpu/drm/bridge/ite-it6505.c
2389
it6505_link_training_setup(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2390
it6505_reset_hdcp(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2391
it6505_aux_reset(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2393
if (it6505->auto_train_retry < 1) {
drivers/gpu/drm/bridge/ite-it6505.c
2394
it6505_link_step_train_process(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2398
ret = it6505_link_start_auto_train(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2400
ret ? "pass" : "failed", it6505->auto_train_retry);
drivers/gpu/drm/bridge/ite-it6505.c
2403
it6505->auto_train_retry = AUTO_TRAIN_RETRY;
drivers/gpu/drm/bridge/ite-it6505.c
2404
it6505_link_train_ok(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2406
it6505->auto_train_retry--;
drivers/gpu/drm/bridge/ite-it6505.c
2407
it6505_dump(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2412
static void it6505_plugged_status_to_codec(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2414
enum drm_connector_status status = it6505->connector_status;
drivers/gpu/drm/bridge/ite-it6505.c
2416
if (it6505->plugged_cb && it6505->codec_dev)
drivers/gpu/drm/bridge/ite-it6505.c
2417
it6505->plugged_cb(it6505->codec_dev,
drivers/gpu/drm/bridge/ite-it6505.c
2421
static void it6505_remove_edid(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2423
drm_edid_free(it6505->cached_edid);
drivers/gpu/drm/bridge/ite-it6505.c
2424
it6505->cached_edid = NULL;
drivers/gpu/drm/bridge/ite-it6505.c
2427
static int it6505_process_hpd_irq(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2429
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2433
if (!it6505_get_sink_hpd_status(it6505)) {
drivers/gpu/drm/bridge/ite-it6505.c
2435
it6505->sink_count = 0;
drivers/gpu/drm/bridge/ite-it6505.c
2439
ret = it6505_dpcd_read(it6505, DP_SINK_COUNT);
drivers/gpu/drm/bridge/ite-it6505.c
2445
dpcd_sink_count, it6505->sink_count);
drivers/gpu/drm/bridge/ite-it6505.c
2447
if (it6505->branch_device && dpcd_sink_count != it6505->sink_count) {
drivers/gpu/drm/bridge/ite-it6505.c
2448
memset(it6505->dpcd, 0, sizeof(it6505->dpcd));
drivers/gpu/drm/bridge/ite-it6505.c
2449
it6505->sink_count = dpcd_sink_count;
drivers/gpu/drm/bridge/ite-it6505.c
2450
it6505_reset_logic(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2451
it6505_int_mask_enable(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2452
it6505_init(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2453
it6505_remove_edid(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2457
dp_irq_vector = it6505_dpcd_read(it6505, DP_DEVICE_SERVICE_IRQ_VECTOR);
drivers/gpu/drm/bridge/ite-it6505.c
2464
bstatus = it6505_dpcd_read(it6505, DP_AUX_HDCP_BSTATUS);
drivers/gpu/drm/bridge/ite-it6505.c
2472
it6505->hdcp_status == HDCP_AUTH_GOING)
drivers/gpu/drm/bridge/ite-it6505.c
2473
it6505_set_bits(it6505, REG_HDCP_TRIGGER, HDCP_TRIGGER_CPIRQ,
drivers/gpu/drm/bridge/ite-it6505.c
2476
it6505->hdcp_status == HDCP_AUTH_DONE)
drivers/gpu/drm/bridge/ite-it6505.c
2477
it6505_start_hdcp(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2480
ret = drm_dp_dpcd_read_link_status(&it6505->aux, link_status);
drivers/gpu/drm/bridge/ite-it6505.c
2489
if (!drm_dp_channel_eq_ok(link_status, it6505->lane_count)) {
drivers/gpu/drm/bridge/ite-it6505.c
2490
it6505->auto_train_retry = AUTO_TRAIN_RETRY;
drivers/gpu/drm/bridge/ite-it6505.c
2491
it6505_video_reset(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2497
static void it6505_irq_hpd(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2499
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2502
it6505->hpd_state = it6505_get_sink_hpd_status(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2504
it6505->hpd_state ? "high" : "low");
drivers/gpu/drm/bridge/ite-it6505.c
2506
if (it6505->hpd_state) {
drivers/gpu/drm/bridge/ite-it6505.c
2507
wait_for_completion_timeout(&it6505->extcon_completion,
drivers/gpu/drm/bridge/ite-it6505.c
2509
it6505_aux_on(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2510
if (it6505->dpcd[0] == 0) {
drivers/gpu/drm/bridge/ite-it6505.c
2511
it6505_get_dpcd(it6505, DP_DPCD_REV, it6505->dpcd,
drivers/gpu/drm/bridge/ite-it6505.c
2512
ARRAY_SIZE(it6505->dpcd));
drivers/gpu/drm/bridge/ite-it6505.c
2513
it6505_variable_config(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2514
it6505_parse_link_capabilities(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2516
it6505->auto_train_retry = AUTO_TRAIN_RETRY;
drivers/gpu/drm/bridge/ite-it6505.c
2518
drm_dp_link_power_up(&it6505->aux, it6505->link.revision);
drivers/gpu/drm/bridge/ite-it6505.c
2519
dp_sink_count = it6505_dpcd_read(it6505, DP_SINK_COUNT);
drivers/gpu/drm/bridge/ite-it6505.c
2520
it6505->sink_count = DP_GET_SINK_COUNT(dp_sink_count);
drivers/gpu/drm/bridge/ite-it6505.c
2523
it6505->sink_count);
drivers/gpu/drm/bridge/ite-it6505.c
2525
it6505_lane_termination_on(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2526
it6505_lane_power_on(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2535
if (it6505->branch_device && it6505->sink_count == 0)
drivers/gpu/drm/bridge/ite-it6505.c
2536
schedule_work(&it6505->link_works);
drivers/gpu/drm/bridge/ite-it6505.c
2538
if (!it6505_get_video_status(it6505))
drivers/gpu/drm/bridge/ite-it6505.c
2539
it6505_video_reset(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2541
memset(it6505->dpcd, 0, sizeof(it6505->dpcd));
drivers/gpu/drm/bridge/ite-it6505.c
2542
it6505_remove_edid(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2544
if (it6505->hdcp_desired)
drivers/gpu/drm/bridge/ite-it6505.c
2545
it6505_stop_hdcp(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2547
it6505_video_disable(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2548
it6505_disable_audio(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2549
it6505_stop_link_train(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2550
it6505_lane_off(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2551
it6505_link_reset_step_train(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2554
if (it6505->bridge.dev)
drivers/gpu/drm/bridge/ite-it6505.c
2555
drm_helper_hpd_irq_event(it6505->bridge.dev);
drivers/gpu/drm/bridge/ite-it6505.c
2558
static void it6505_irq_hpd_irq(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2560
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2564
if (it6505_process_hpd_irq(it6505) < 0)
drivers/gpu/drm/bridge/ite-it6505.c
2568
static void it6505_irq_scdt(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2570
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2573
data = it6505_get_video_status(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2576
it6505_calc_video_info(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2577
it6505_link_reset_step_train(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2580
schedule_work(&it6505->link_works);
drivers/gpu/drm/bridge/ite-it6505.c
2583
static void it6505_irq_hdcp_done(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2585
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2588
it6505->hdcp_status = HDCP_AUTH_DONE;
drivers/gpu/drm/bridge/ite-it6505.c
2589
it6505_show_hdcp_info(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2592
static void it6505_irq_hdcp_fail(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2594
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2597
it6505->hdcp_status = HDCP_AUTH_IDLE;
drivers/gpu/drm/bridge/ite-it6505.c
2598
it6505_show_hdcp_info(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2599
it6505_start_hdcp(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2602
static void it6505_irq_aux_cmd_fail(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2604
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2609
static void it6505_irq_hdcp_ksv_check(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2611
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2615
it6505_set_bits(it6505, REG_HDCP_TRIGGER,
drivers/gpu/drm/bridge/ite-it6505.c
2618
schedule_work(&it6505->hdcp_wait_ksv_list);
drivers/gpu/drm/bridge/ite-it6505.c
2621
static void it6505_irq_audio_fifo_error(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2623
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2627
if (it6505_audio_input(it6505))
drivers/gpu/drm/bridge/ite-it6505.c
2628
it6505_enable_audio(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2631
static void it6505_irq_link_train_fail(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2633
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2636
schedule_work(&it6505->link_works);
drivers/gpu/drm/bridge/ite-it6505.c
2644
static void it6505_irq_video_handler(struct it6505 *it6505, const int *int_status)
drivers/gpu/drm/bridge/ite-it6505.c
2646
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2654
if ((!it6505_get_video_status(it6505) &&
drivers/gpu/drm/bridge/ite-it6505.c
2660
it6505->auto_train_retry = AUTO_TRAIN_RETRY;
drivers/gpu/drm/bridge/ite-it6505.c
2661
flush_work(&it6505->link_works);
drivers/gpu/drm/bridge/ite-it6505.c
2662
it6505_stop_hdcp(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2663
it6505_video_reset(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2672
reg_int03 = it6505_read(it6505, INT_STATUS_03);
drivers/gpu/drm/bridge/ite-it6505.c
2673
reg_0d = it6505_read(it6505, REG_SYSTEM_STS);
drivers/gpu/drm/bridge/ite-it6505.c
2676
it6505_write(it6505, INT_STATUS_03, reg_int03);
drivers/gpu/drm/bridge/ite-it6505.c
2685
it6505_irq_scdt(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2690
struct it6505 *it6505 = data;
drivers/gpu/drm/bridge/ite-it6505.c
2691
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2694
void (*handler)(struct it6505 *it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2707
if (it6505->enable_drv_hold || !it6505->powered)
drivers/gpu/drm/bridge/ite-it6505.c
2712
int_status[0] = it6505_read(it6505, INT_STATUS_01);
drivers/gpu/drm/bridge/ite-it6505.c
2713
int_status[1] = it6505_read(it6505, INT_STATUS_02);
drivers/gpu/drm/bridge/ite-it6505.c
2714
int_status[2] = it6505_read(it6505, INT_STATUS_03);
drivers/gpu/drm/bridge/ite-it6505.c
2716
it6505_write(it6505, INT_STATUS_01, int_status[0]);
drivers/gpu/drm/bridge/ite-it6505.c
2717
it6505_write(it6505, INT_STATUS_02, int_status[1]);
drivers/gpu/drm/bridge/ite-it6505.c
2718
it6505_write(it6505, INT_STATUS_03, int_status[2]);
drivers/gpu/drm/bridge/ite-it6505.c
2723
it6505_debug_print(it6505, REG_SYSTEM_STS, "");
drivers/gpu/drm/bridge/ite-it6505.c
2726
irq_vec[0].handler(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2728
if (it6505->hpd_state) {
drivers/gpu/drm/bridge/ite-it6505.c
2731
irq_vec[i].handler(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2733
it6505_irq_video_handler(it6505, (unsigned int *)int_status);
drivers/gpu/drm/bridge/ite-it6505.c
2741
static int it6505_poweron(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2743
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2744
struct it6505_platform_data *pdata = &it6505->pdata;
drivers/gpu/drm/bridge/ite-it6505.c
2749
if (it6505->powered) {
drivers/gpu/drm/bridge/ite-it6505.c
2781
it6505->powered = true;
drivers/gpu/drm/bridge/ite-it6505.c
2782
it6505_reset_logic(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2783
it6505_int_mask_enable(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2784
it6505_init(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2785
it6505_lane_off(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2787
enable_irq(it6505->irq);
drivers/gpu/drm/bridge/ite-it6505.c
2792
static int it6505_poweroff(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2794
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2795
struct it6505_platform_data *pdata = &it6505->pdata;
drivers/gpu/drm/bridge/ite-it6505.c
2800
if (!it6505->powered) {
drivers/gpu/drm/bridge/ite-it6505.c
2805
disable_irq_nosync(it6505->irq);
drivers/gpu/drm/bridge/ite-it6505.c
2822
it6505->powered = false;
drivers/gpu/drm/bridge/ite-it6505.c
2823
it6505->sink_count = 0;
drivers/gpu/drm/bridge/ite-it6505.c
2828
static enum drm_connector_status it6505_detect(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2830
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2835
it6505->sink_count, it6505->powered);
drivers/gpu/drm/bridge/ite-it6505.c
2837
mutex_lock(&it6505->mode_lock);
drivers/gpu/drm/bridge/ite-it6505.c
2839
if (!it6505->powered)
drivers/gpu/drm/bridge/ite-it6505.c
2842
if (it6505->enable_drv_hold) {
drivers/gpu/drm/bridge/ite-it6505.c
2843
status = it6505->hpd_state ? connector_status_connected :
drivers/gpu/drm/bridge/ite-it6505.c
2848
if (it6505->hpd_state) {
drivers/gpu/drm/bridge/ite-it6505.c
2849
drm_dp_link_power_up(&it6505->aux, it6505->link.revision);
drivers/gpu/drm/bridge/ite-it6505.c
2850
dp_sink_count = it6505_dpcd_read(it6505, DP_SINK_COUNT);
drivers/gpu/drm/bridge/ite-it6505.c
2851
it6505->sink_count = DP_GET_SINK_COUNT(dp_sink_count);
drivers/gpu/drm/bridge/ite-it6505.c
2853
it6505->sink_count, it6505->branch_device);
drivers/gpu/drm/bridge/ite-it6505.c
2855
if (it6505->branch_device) {
drivers/gpu/drm/bridge/ite-it6505.c
2856
status = (it6505->sink_count != 0) ?
drivers/gpu/drm/bridge/ite-it6505.c
2863
it6505->sink_count = 0;
drivers/gpu/drm/bridge/ite-it6505.c
2864
memset(it6505->dpcd, 0, sizeof(it6505->dpcd));
drivers/gpu/drm/bridge/ite-it6505.c
2868
if (it6505->connector_status != status) {
drivers/gpu/drm/bridge/ite-it6505.c
2869
it6505->connector_status = status;
drivers/gpu/drm/bridge/ite-it6505.c
2870
it6505_plugged_status_to_codec(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2873
mutex_unlock(&it6505->mode_lock);
drivers/gpu/drm/bridge/ite-it6505.c
2881
struct it6505 *it6505 = container_of(self, struct it6505, event_nb);
drivers/gpu/drm/bridge/ite-it6505.c
2883
schedule_work(&it6505->extcon_wq);
drivers/gpu/drm/bridge/ite-it6505.c
2889
struct it6505 *it6505 = container_of(work, struct it6505, extcon_wq);
drivers/gpu/drm/bridge/ite-it6505.c
2890
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2893
if (it6505->enable_drv_hold)
drivers/gpu/drm/bridge/ite-it6505.c
2896
mutex_lock(&it6505->extcon_lock);
drivers/gpu/drm/bridge/ite-it6505.c
2898
state = extcon_get_state(it6505->extcon, EXTCON_DISP_DP);
drivers/gpu/drm/bridge/ite-it6505.c
2901
if (state == it6505->extcon_state || unlikely(state < 0))
drivers/gpu/drm/bridge/ite-it6505.c
2903
it6505->extcon_state = state;
drivers/gpu/drm/bridge/ite-it6505.c
2915
it6505_poweron(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2917
complete_all(&it6505->extcon_completion);
drivers/gpu/drm/bridge/ite-it6505.c
2921
reinit_completion(&it6505->extcon_completion);
drivers/gpu/drm/bridge/ite-it6505.c
2923
drm_helper_hpd_irq_event(it6505->bridge.dev);
drivers/gpu/drm/bridge/ite-it6505.c
2924
memset(it6505->dpcd, 0, sizeof(it6505->dpcd));
drivers/gpu/drm/bridge/ite-it6505.c
2929
mutex_unlock(&it6505->extcon_lock);
drivers/gpu/drm/bridge/ite-it6505.c
2932
static int it6505_use_notifier_module(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2935
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2937
it6505->event_nb.notifier_call = it6505_extcon_notifier;
drivers/gpu/drm/bridge/ite-it6505.c
2938
INIT_WORK(&it6505->extcon_wq, it6505_extcon_work);
drivers/gpu/drm/bridge/ite-it6505.c
2939
ret = devm_extcon_register_notifier(it6505->dev,
drivers/gpu/drm/bridge/ite-it6505.c
2940
it6505->extcon, EXTCON_DISP_DP,
drivers/gpu/drm/bridge/ite-it6505.c
2941
&it6505->event_nb);
drivers/gpu/drm/bridge/ite-it6505.c
2947
schedule_work(&it6505->extcon_wq);
drivers/gpu/drm/bridge/ite-it6505.c
2952
static void it6505_remove_notifier_module(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
2954
if (it6505->extcon) {
drivers/gpu/drm/bridge/ite-it6505.c
2955
devm_extcon_unregister_notifier(it6505->dev,
drivers/gpu/drm/bridge/ite-it6505.c
2956
it6505->extcon, EXTCON_DISP_DP,
drivers/gpu/drm/bridge/ite-it6505.c
2957
&it6505->event_nb);
drivers/gpu/drm/bridge/ite-it6505.c
2959
flush_work(&it6505->extcon_wq);
drivers/gpu/drm/bridge/ite-it6505.c
2965
struct it6505 *it6505 = container_of(work, struct it6505,
drivers/gpu/drm/bridge/ite-it6505.c
2968
DRM_DEV_DEBUG_DRIVER(it6505->dev, "start");
drivers/gpu/drm/bridge/ite-it6505.c
2970
if (!it6505->powered)
drivers/gpu/drm/bridge/ite-it6505.c
2973
if (!it6505->enable_drv_hold)
drivers/gpu/drm/bridge/ite-it6505.c
2974
it6505_enable_audio(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
2977
static int __maybe_unused it6505_audio_setup_hw_params(struct it6505 *it6505,
drivers/gpu/drm/bridge/ite-it6505.c
2981
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
2988
if (!it6505->bridge.encoder)
drivers/gpu/drm/bridge/ite-it6505.c
2993
it6505->audio.channel_count);
drivers/gpu/drm/bridge/ite-it6505.c
2997
it6505->audio.channel_count = params->cea.channels;
drivers/gpu/drm/bridge/ite-it6505.c
3009
it6505->audio.sample_rate = audio_sample_rate_map[i].rate;
drivers/gpu/drm/bridge/ite-it6505.c
3013
it6505->audio.word_length = WORD_LENGTH_16BIT;
drivers/gpu/drm/bridge/ite-it6505.c
3016
it6505->audio.word_length = WORD_LENGTH_18BIT;
drivers/gpu/drm/bridge/ite-it6505.c
3019
it6505->audio.word_length = WORD_LENGTH_20BIT;
drivers/gpu/drm/bridge/ite-it6505.c
3023
it6505->audio.word_length = WORD_LENGTH_24BIT;
drivers/gpu/drm/bridge/ite-it6505.c
3036
struct it6505 *it6505 = dev_get_drvdata(dev);
drivers/gpu/drm/bridge/ite-it6505.c
3038
if (it6505->powered)
drivers/gpu/drm/bridge/ite-it6505.c
3039
it6505_disable_audio(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3047
struct it6505 *it6505 = data;
drivers/gpu/drm/bridge/ite-it6505.c
3049
it6505->plugged_cb = fn;
drivers/gpu/drm/bridge/ite-it6505.c
3050
it6505->codec_dev = codec_dev;
drivers/gpu/drm/bridge/ite-it6505.c
3051
it6505_plugged_status_to_codec(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3056
static inline struct it6505 *bridge_to_it6505(struct drm_bridge *bridge)
drivers/gpu/drm/bridge/ite-it6505.c
3058
return container_of(bridge, struct it6505, bridge);
drivers/gpu/drm/bridge/ite-it6505.c
3065
struct it6505 *it6505 = bridge_to_it6505(bridge);
drivers/gpu/drm/bridge/ite-it6505.c
3066
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
3075
it6505->aux.drm_dev = bridge->dev;
drivers/gpu/drm/bridge/ite-it6505.c
3077
ret = drm_dp_aux_register(&it6505->aux);
drivers/gpu/drm/bridge/ite-it6505.c
3084
if (it6505->extcon) {
drivers/gpu/drm/bridge/ite-it6505.c
3085
ret = it6505_use_notifier_module(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3097
struct it6505 *it6505 = bridge_to_it6505(bridge);
drivers/gpu/drm/bridge/ite-it6505.c
3099
flush_work(&it6505->link_works);
drivers/gpu/drm/bridge/ite-it6505.c
3100
it6505_remove_notifier_module(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3108
struct it6505 *it6505 = bridge_to_it6505(bridge);
drivers/gpu/drm/bridge/ite-it6505.c
3113
if (mode->clock > it6505->max_dpi_pixel_clock)
drivers/gpu/drm/bridge/ite-it6505.c
3116
it6505->video_info.clock = mode->clock;
drivers/gpu/drm/bridge/ite-it6505.c
3124
struct it6505 *it6505 = bridge_to_it6505(bridge);
drivers/gpu/drm/bridge/ite-it6505.c
3125
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
3162
it6505_update_video_parameter(it6505, mode);
drivers/gpu/drm/bridge/ite-it6505.c
3164
ret = it6505_send_video_infoframe(it6505, &frame);
drivers/gpu/drm/bridge/ite-it6505.c
3169
it6505_int_mask_enable(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3170
it6505_video_reset(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3172
drm_dp_link_power_up(&it6505->aux, it6505->link.revision);
drivers/gpu/drm/bridge/ite-it6505.c
3178
struct it6505 *it6505 = bridge_to_it6505(bridge);
drivers/gpu/drm/bridge/ite-it6505.c
3179
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
3183
if (it6505->powered) {
drivers/gpu/drm/bridge/ite-it6505.c
3184
drm_dp_link_power_down(&it6505->aux, it6505->link.revision);
drivers/gpu/drm/bridge/ite-it6505.c
3185
it6505_video_disable(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3192
struct it6505 *it6505 = bridge_to_it6505(bridge);
drivers/gpu/drm/bridge/ite-it6505.c
3193
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
3203
struct it6505 *it6505 = bridge_to_it6505(bridge);
drivers/gpu/drm/bridge/ite-it6505.c
3204
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
3214
struct it6505 *it6505 = bridge_to_it6505(bridge);
drivers/gpu/drm/bridge/ite-it6505.c
3216
return it6505_detect(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3222
struct it6505 *it6505 = bridge_to_it6505(bridge);
drivers/gpu/drm/bridge/ite-it6505.c
3223
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
3225
if (!it6505->cached_edid) {
drivers/gpu/drm/bridge/ite-it6505.c
3226
it6505->cached_edid = drm_edid_read_custom(connector,
drivers/gpu/drm/bridge/ite-it6505.c
3228
it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3230
if (!it6505->cached_edid) {
drivers/gpu/drm/bridge/ite-it6505.c
3236
return drm_edid_dup(it6505->cached_edid);
drivers/gpu/drm/bridge/ite-it6505.c
3256
struct it6505 *it6505 = dev_get_drvdata(dev);
drivers/gpu/drm/bridge/ite-it6505.c
3258
return it6505_poweron(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3263
struct it6505 *it6505 = dev_get_drvdata(dev);
drivers/gpu/drm/bridge/ite-it6505.c
3265
it6505_remove_edid(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3267
return it6505_poweroff(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3275
static int it6505_init_pdata(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
3277
struct it6505_platform_data *pdata = &it6505->pdata;
drivers/gpu/drm/bridge/ite-it6505.c
3278
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
3318
static void it6505_parse_dt(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
3320
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
3325
u32 *afe_setting = &it6505->afe_setting;
drivers/gpu/drm/bridge/ite-it6505.c
3326
u32 *max_lane_count = &it6505->max_lane_count;
drivers/gpu/drm/bridge/ite-it6505.c
3327
u32 *max_dpi_pixel_clock = &it6505->max_dpi_pixel_clock;
drivers/gpu/drm/bridge/ite-it6505.c
3329
it6505->lane_swap_disabled =
drivers/gpu/drm/bridge/ite-it6505.c
3332
if (it6505->lane_swap_disabled)
drivers/gpu/drm/bridge/ite-it6505.c
3333
it6505->lane_swap = false;
drivers/gpu/drm/bridge/ite-it6505.c
3390
it6505->afe_setting, it6505->max_lane_count);
drivers/gpu/drm/bridge/ite-it6505.c
3392
it6505->max_dpi_pixel_clock);
drivers/gpu/drm/bridge/ite-it6505.c
3398
struct it6505 *it6505 = file->private_data;
drivers/gpu/drm/bridge/ite-it6505.c
3404
if (!it6505)
drivers/gpu/drm/bridge/ite-it6505.c
3407
it6505_calc_video_info(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3408
vid = &it6505->video_info;
drivers/gpu/drm/bridge/ite-it6505.c
3437
struct it6505 *it6505 = data;
drivers/gpu/drm/bridge/ite-it6505.c
3439
if (!it6505)
drivers/gpu/drm/bridge/ite-it6505.c
3443
it6505_poweron(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3445
it6505_poweroff(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3452
struct it6505 *it6505 = data;
drivers/gpu/drm/bridge/ite-it6505.c
3454
if (!it6505)
drivers/gpu/drm/bridge/ite-it6505.c
3457
*buf = it6505->enable_drv_hold;
drivers/gpu/drm/bridge/ite-it6505.c
3464
struct it6505 *it6505 = data;
drivers/gpu/drm/bridge/ite-it6505.c
3466
if (!it6505)
drivers/gpu/drm/bridge/ite-it6505.c
3469
it6505->enable_drv_hold = drv_hold;
drivers/gpu/drm/bridge/ite-it6505.c
3471
if (it6505->enable_drv_hold) {
drivers/gpu/drm/bridge/ite-it6505.c
3472
it6505_int_mask_disable(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3474
it6505_clear_int(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3475
it6505_int_mask_enable(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3477
if (it6505->powered) {
drivers/gpu/drm/bridge/ite-it6505.c
3478
it6505->connector_status =
drivers/gpu/drm/bridge/ite-it6505.c
3479
it6505_get_sink_hpd_status(it6505) ?
drivers/gpu/drm/bridge/ite-it6505.c
3483
it6505->connector_status =
drivers/gpu/drm/bridge/ite-it6505.c
3511
static void debugfs_create_files(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
3517
it6505->debugfs, it6505,
drivers/gpu/drm/bridge/ite-it6505.c
3523
static void debugfs_init(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
3525
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
3527
it6505->debugfs = debugfs_create_dir(DEBUGFS_DIR_NAME, NULL);
drivers/gpu/drm/bridge/ite-it6505.c
3529
if (IS_ERR(it6505->debugfs)) {
drivers/gpu/drm/bridge/ite-it6505.c
3534
debugfs_create_files(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3537
static void it6505_debugfs_remove(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
3539
debugfs_remove_recursive(it6505->debugfs);
drivers/gpu/drm/bridge/ite-it6505.c
3544
struct it6505 *it6505 = dev_get_drvdata(&client->dev);
drivers/gpu/drm/bridge/ite-it6505.c
3546
if (it6505->powered)
drivers/gpu/drm/bridge/ite-it6505.c
3547
it6505_lane_off(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3552
struct it6505 *it6505;
drivers/gpu/drm/bridge/ite-it6505.c
3557
it6505 = devm_drm_bridge_alloc(&client->dev, struct it6505, bridge,
drivers/gpu/drm/bridge/ite-it6505.c
3559
if (IS_ERR(it6505))
drivers/gpu/drm/bridge/ite-it6505.c
3560
return PTR_ERR(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3562
mutex_init(&it6505->extcon_lock);
drivers/gpu/drm/bridge/ite-it6505.c
3563
mutex_init(&it6505->mode_lock);
drivers/gpu/drm/bridge/ite-it6505.c
3564
mutex_init(&it6505->aux_lock);
drivers/gpu/drm/bridge/ite-it6505.c
3566
it6505->bridge.of_node = client->dev.of_node;
drivers/gpu/drm/bridge/ite-it6505.c
3567
it6505->connector_status = connector_status_disconnected;
drivers/gpu/drm/bridge/ite-it6505.c
3568
it6505->dev = &client->dev;
drivers/gpu/drm/bridge/ite-it6505.c
3569
i2c_set_clientdata(client, it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3580
it6505->extcon = extcon;
drivers/gpu/drm/bridge/ite-it6505.c
3582
it6505->regmap = devm_regmap_init_i2c(client, &it6505_regmap_config);
drivers/gpu/drm/bridge/ite-it6505.c
3583
if (IS_ERR(it6505->regmap)) {
drivers/gpu/drm/bridge/ite-it6505.c
3585
err = PTR_ERR(it6505->regmap);
drivers/gpu/drm/bridge/ite-it6505.c
3589
err = it6505_init_pdata(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3595
it6505_parse_dt(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3597
it6505->irq = client->irq;
drivers/gpu/drm/bridge/ite-it6505.c
3599
if (!it6505->irq) {
drivers/gpu/drm/bridge/ite-it6505.c
3605
err = devm_request_threaded_irq(&client->dev, it6505->irq, NULL,
drivers/gpu/drm/bridge/ite-it6505.c
3609
"it6505-intp", it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3615
INIT_WORK(&it6505->link_works, it6505_link_training_work);
drivers/gpu/drm/bridge/ite-it6505.c
3616
INIT_WORK(&it6505->hdcp_wait_ksv_list, it6505_hdcp_wait_ksv_list);
drivers/gpu/drm/bridge/ite-it6505.c
3617
INIT_DELAYED_WORK(&it6505->hdcp_work, it6505_hdcp_work);
drivers/gpu/drm/bridge/ite-it6505.c
3618
init_completion(&it6505->extcon_completion);
drivers/gpu/drm/bridge/ite-it6505.c
3619
memset(it6505->dpcd, 0, sizeof(it6505->dpcd));
drivers/gpu/drm/bridge/ite-it6505.c
3620
it6505->powered = false;
drivers/gpu/drm/bridge/ite-it6505.c
3621
it6505->enable_drv_hold = DEFAULT_DRV_HOLD;
drivers/gpu/drm/bridge/ite-it6505.c
3624
it6505_poweron(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3627
debugfs_init(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3630
it6505->aux.name = "DP-AUX";
drivers/gpu/drm/bridge/ite-it6505.c
3631
it6505->aux.dev = dev;
drivers/gpu/drm/bridge/ite-it6505.c
3632
it6505->aux.transfer = it6505_aux_transfer;
drivers/gpu/drm/bridge/ite-it6505.c
3633
drm_dp_aux_init(&it6505->aux);
drivers/gpu/drm/bridge/ite-it6505.c
3635
it6505->bridge.type = DRM_MODE_CONNECTOR_DisplayPort;
drivers/gpu/drm/bridge/ite-it6505.c
3636
it6505->bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID |
drivers/gpu/drm/bridge/ite-it6505.c
3638
drm_bridge_add(&it6505->bridge);
drivers/gpu/drm/bridge/ite-it6505.c
3645
struct it6505 *it6505 = i2c_get_clientdata(client);
drivers/gpu/drm/bridge/ite-it6505.c
3647
drm_bridge_remove(&it6505->bridge);
drivers/gpu/drm/bridge/ite-it6505.c
3648
drm_dp_aux_unregister(&it6505->aux);
drivers/gpu/drm/bridge/ite-it6505.c
3649
it6505_debugfs_remove(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3650
it6505_poweroff(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
3651
it6505_remove_edid(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
550
static int it6505_read(struct it6505 *it6505, unsigned int reg_addr)
drivers/gpu/drm/bridge/ite-it6505.c
554
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
556
if (!it6505->powered)
drivers/gpu/drm/bridge/ite-it6505.c
559
err = regmap_read(it6505->regmap, reg_addr, &value);
drivers/gpu/drm/bridge/ite-it6505.c
568
static int it6505_write(struct it6505 *it6505, unsigned int reg_addr,
drivers/gpu/drm/bridge/ite-it6505.c
572
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
574
if (!it6505->powered)
drivers/gpu/drm/bridge/ite-it6505.c
577
err = regmap_write(it6505->regmap, reg_addr, reg_val);
drivers/gpu/drm/bridge/ite-it6505.c
588
static int it6505_set_bits(struct it6505 *it6505, unsigned int reg,
drivers/gpu/drm/bridge/ite-it6505.c
592
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
594
if (!it6505->powered)
drivers/gpu/drm/bridge/ite-it6505.c
597
err = regmap_update_bits(it6505->regmap, reg, mask, value);
drivers/gpu/drm/bridge/ite-it6505.c
607
static void it6505_debug_print(struct it6505 *it6505, unsigned int reg,
drivers/gpu/drm/bridge/ite-it6505.c
610
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
616
val = it6505_read(it6505, reg);
drivers/gpu/drm/bridge/ite-it6505.c
625
static int it6505_dpcd_read(struct it6505 *it6505, unsigned long offset)
drivers/gpu/drm/bridge/ite-it6505.c
629
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
631
ret = drm_dp_dpcd_readb(&it6505->aux, offset, &value);
drivers/gpu/drm/bridge/ite-it6505.c
639
static int it6505_dpcd_write(struct it6505 *it6505, unsigned long offset,
drivers/gpu/drm/bridge/ite-it6505.c
643
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
645
ret = drm_dp_dpcd_writeb(&it6505->aux, offset, datain);
drivers/gpu/drm/bridge/ite-it6505.c
653
static int it6505_get_dpcd(struct it6505 *it6505, int offset, u8 *dpcd, int num)
drivers/gpu/drm/bridge/ite-it6505.c
656
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
658
ret = drm_dp_dpcd_read(&it6505->aux, offset, dpcd, num);
drivers/gpu/drm/bridge/ite-it6505.c
669
static void it6505_dump(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
673
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
677
regs[j] = it6505_read(it6505, i + j);
drivers/gpu/drm/bridge/ite-it6505.c
683
static bool it6505_get_sink_hpd_status(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
687
reg_0d = it6505_read(it6505, REG_SYSTEM_STS);
drivers/gpu/drm/bridge/ite-it6505.c
695
static int it6505_read_word(struct it6505 *it6505, unsigned int reg)
drivers/gpu/drm/bridge/ite-it6505.c
699
val0 = it6505_read(it6505, reg);
drivers/gpu/drm/bridge/ite-it6505.c
703
val1 = it6505_read(it6505, reg + 1);
drivers/gpu/drm/bridge/ite-it6505.c
710
static void it6505_calc_video_info(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
712
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
719
rddata = it6505_read(it6505, REG_INPUT_CTRL);
drivers/gpu/drm/bridge/ite-it6505.c
724
htotal = it6505_read_word(it6505, REG_INPUT_HTOTAL) & 0x1FFF;
drivers/gpu/drm/bridge/ite-it6505.c
725
hdes = it6505_read_word(it6505, REG_INPUT_HACTIVE_START) & 0x1FFF;
drivers/gpu/drm/bridge/ite-it6505.c
726
hdew = it6505_read_word(it6505, REG_INPUT_HACTIVE_WIDTH) & 0x1FFF;
drivers/gpu/drm/bridge/ite-it6505.c
727
hfph = it6505_read_word(it6505, REG_INPUT_HFRONT_PORCH) & 0x1FFF;
drivers/gpu/drm/bridge/ite-it6505.c
728
hsyncw = it6505_read_word(it6505, REG_INPUT_HSYNC_WIDTH) & 0x1FFF;
drivers/gpu/drm/bridge/ite-it6505.c
730
vtotal = it6505_read_word(it6505, REG_INPUT_VTOTAL) & 0xFFF;
drivers/gpu/drm/bridge/ite-it6505.c
731
vdes = it6505_read_word(it6505, REG_INPUT_VACTIVE_START) & 0xFFF;
drivers/gpu/drm/bridge/ite-it6505.c
732
vdew = it6505_read_word(it6505, REG_INPUT_VACTIVE_WIDTH) & 0xFFF;
drivers/gpu/drm/bridge/ite-it6505.c
733
vfph = it6505_read_word(it6505, REG_INPUT_VFRONT_PORCH) & 0xFFF;
drivers/gpu/drm/bridge/ite-it6505.c
734
vsyncw = it6505_read_word(it6505, REG_INPUT_VSYNC_WIDTH) & 0xFFF;
drivers/gpu/drm/bridge/ite-it6505.c
742
it6505_set_bits(it6505, REG_DATA_CTRL0, ENABLE_PCLK_COUNTER,
drivers/gpu/drm/bridge/ite-it6505.c
745
it6505_set_bits(it6505, REG_DATA_CTRL0, ENABLE_PCLK_COUNTER,
drivers/gpu/drm/bridge/ite-it6505.c
747
rddata = it6505_read_word(it6505, REG_PCLK_COUNTER_VALUE) &
drivers/gpu/drm/bridge/ite-it6505.c
760
it6505->video_info.clock = pclk;
drivers/gpu/drm/bridge/ite-it6505.c
761
it6505->video_info.hdisplay = hdew;
drivers/gpu/drm/bridge/ite-it6505.c
762
it6505->video_info.hsync_start = hdew + hfph;
drivers/gpu/drm/bridge/ite-it6505.c
763
it6505->video_info.hsync_end = hdew + hfph + hsyncw;
drivers/gpu/drm/bridge/ite-it6505.c
764
it6505->video_info.htotal = htotal;
drivers/gpu/drm/bridge/ite-it6505.c
765
it6505->video_info.vdisplay = vdew;
drivers/gpu/drm/bridge/ite-it6505.c
766
it6505->video_info.vsync_start = vdew + vfph;
drivers/gpu/drm/bridge/ite-it6505.c
767
it6505->video_info.vsync_end = vdew + vfph + vsyncw;
drivers/gpu/drm/bridge/ite-it6505.c
768
it6505->video_info.vtotal = vtotal;
drivers/gpu/drm/bridge/ite-it6505.c
771
DRM_MODE_ARG(&it6505->video_info));
drivers/gpu/drm/bridge/ite-it6505.c
774
static void it6505_clear_int(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
776
it6505_write(it6505, INT_STATUS_01, 0xFF);
drivers/gpu/drm/bridge/ite-it6505.c
777
it6505_write(it6505, INT_STATUS_02, 0xFF);
drivers/gpu/drm/bridge/ite-it6505.c
778
it6505_write(it6505, INT_STATUS_03, 0xFF);
drivers/gpu/drm/bridge/ite-it6505.c
781
static void it6505_int_mask_enable(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
783
it6505_write(it6505, INT_MASK_01, BIT(INT_HPD_CHANGE) |
drivers/gpu/drm/bridge/ite-it6505.c
787
it6505_write(it6505, INT_MASK_02, BIT(INT_AUX_CMD_FAIL) |
drivers/gpu/drm/bridge/ite-it6505.c
790
it6505_write(it6505, INT_MASK_03, BIT(INT_LINK_TRAIN_FAIL) |
drivers/gpu/drm/bridge/ite-it6505.c
794
static void it6505_int_mask_disable(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
796
it6505_write(it6505, INT_MASK_01, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
797
it6505_write(it6505, INT_MASK_02, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
798
it6505_write(it6505, INT_MASK_03, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
801
static void it6505_lane_termination_on(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
805
regcf = it6505_read(it6505, REG_USER_DRV_PRE);
drivers/gpu/drm/bridge/ite-it6505.c
808
it6505_set_bits(it6505, REG_DRV_LN_DATA_SEL, 0x80, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
811
if (it6505->lane_swap) {
drivers/gpu/drm/bridge/ite-it6505.c
812
switch (it6505->lane_count) {
drivers/gpu/drm/bridge/ite-it6505.c
815
it6505_set_bits(it6505, REG_DRV_LN_DATA_SEL,
drivers/gpu/drm/bridge/ite-it6505.c
819
it6505_set_bits(it6505, REG_DRV_LN_DATA_SEL,
drivers/gpu/drm/bridge/ite-it6505.c
824
switch (it6505->lane_count) {
drivers/gpu/drm/bridge/ite-it6505.c
827
it6505_set_bits(it6505, REG_DRV_LN_DATA_SEL,
drivers/gpu/drm/bridge/ite-it6505.c
831
it6505_set_bits(it6505, REG_DRV_LN_DATA_SEL,
drivers/gpu/drm/bridge/ite-it6505.c
839
static void it6505_lane_termination_off(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
843
regcf = it6505_read(it6505, REG_USER_DRV_PRE);
drivers/gpu/drm/bridge/ite-it6505.c
846
it6505_set_bits(it6505, REG_DRV_LN_DATA_SEL, 0x80, 0x80);
drivers/gpu/drm/bridge/ite-it6505.c
849
it6505_set_bits(it6505, REG_DRV_LN_DATA_SEL, 0x0C, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
852
static void it6505_lane_power_on(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
854
it6505_set_bits(it6505, REG_LINK_DRV, 0xF1,
drivers/gpu/drm/bridge/ite-it6505.c
855
(it6505->lane_swap ?
drivers/gpu/drm/bridge/ite-it6505.c
856
GENMASK(7, 8 - it6505->lane_count) :
drivers/gpu/drm/bridge/ite-it6505.c
857
GENMASK(3 + it6505->lane_count, 4)) |
drivers/gpu/drm/bridge/ite-it6505.c
861
static void it6505_lane_power_off(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
863
it6505_set_bits(it6505, REG_LINK_DRV, 0xF0, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
866
static void it6505_lane_off(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
868
it6505_lane_power_off(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
869
it6505_lane_termination_off(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
872
static void it6505_aux_termination_on(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
876
regcf = it6505_read(it6505, REG_USER_DRV_PRE);
drivers/gpu/drm/bridge/ite-it6505.c
879
it6505_lane_termination_on(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
882
it6505_set_bits(it6505, REG_DRV_LN_DATA_SEL, 0x80, 0x80);
drivers/gpu/drm/bridge/ite-it6505.c
885
static void it6505_aux_power_on(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
887
it6505_set_bits(it6505, REG_AUX, 0x02, 0x02);
drivers/gpu/drm/bridge/ite-it6505.c
890
static void it6505_aux_on(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
892
it6505_aux_power_on(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
893
it6505_aux_termination_on(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
896
static void it6505_aux_reset(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
898
it6505_set_bits(it6505, REG_RESET_CTRL, AUX_RESET, AUX_RESET);
drivers/gpu/drm/bridge/ite-it6505.c
899
it6505_set_bits(it6505, REG_RESET_CTRL, AUX_RESET, 0x00);
drivers/gpu/drm/bridge/ite-it6505.c
902
static void it6505_reset_logic(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
904
regmap_write(it6505->regmap, REG_RESET_CTRL, ALL_LOGIC_RESET);
drivers/gpu/drm/bridge/ite-it6505.c
908
static bool it6505_aux_op_finished(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
910
int reg2b = it6505_read(it6505, REG_AUX_CMD_REQ);
drivers/gpu/drm/bridge/ite-it6505.c
918
static int it6505_aux_wait(struct it6505 *it6505)
drivers/gpu/drm/bridge/ite-it6505.c
922
struct device *dev = it6505->dev;
drivers/gpu/drm/bridge/ite-it6505.c
926
while (!it6505_aux_op_finished(it6505)) {
drivers/gpu/drm/bridge/ite-it6505.c
934
status = it6505_read(it6505, REG_AUX_ERROR_STS);
drivers/gpu/drm/bridge/ite-it6505.c
943
static ssize_t it6505_aux_operation(struct it6505 *it6505,
drivers/gpu/drm/bridge/ite-it6505.c
951
if (!it6505_get_sink_hpd_status(it6505))
drivers/gpu/drm/bridge/ite-it6505.c
955
it6505_set_bits(it6505, REG_AUX_CTRL, AUX_USER_MODE, AUX_USER_MODE);
drivers/gpu/drm/bridge/ite-it6505.c
963
it6505_set_bits(it6505, REG_AUX_CTRL,
drivers/gpu/drm/bridge/ite-it6505.c
967
it6505_set_bits(it6505, REG_AUX_CTRL,
drivers/gpu/drm/bridge/ite-it6505.c
973
it6505_set_bits(it6505, REG_AUX_CTRL, AUX_NO_SEGMENT_WR,
drivers/gpu/drm/bridge/ite-it6505.c
978
it6505_write(it6505, REG_AUX_ADR_0_7, (address >> 0) & 0xFF);
drivers/gpu/drm/bridge/ite-it6505.c
980
it6505_write(it6505, REG_AUX_ADR_8_15, (address >> 8) & 0xFF);
drivers/gpu/drm/bridge/ite-it6505.c
982
it6505_write(it6505, REG_AUX_ADR_16_19,
drivers/gpu/drm/bridge/ite-it6505.c
986
regmap_bulk_write(it6505->regmap, REG_AUX_OUT_DATA0, buffer,
drivers/gpu/drm/bridge/ite-it6505.c
990
it6505_write(it6505, REG_AUX_CMD_REQ, FIELD_GET(M_AUX_REQ_CMD, cmd));
drivers/gpu/drm/bridge/ite-it6505.c
992
ret = it6505_aux_wait(it6505);
drivers/gpu/drm/bridge/ite-it6505.c
996
ret = it6505_read(it6505, REG_AUX_ERROR_STS);