• Home
  • Raw
  • Download

Lines Matching full:aux

40  * levels to deal with Display Port sink devices and related things like DP aux
41 * channel transfers, EDID reading over DP aux channels, decoding certain DPCD
126 DRM_DEBUG_KMS("AUX interval %d, out of range (max 4)\n", in drm_dp_link_train_clock_recovery_delay()
141 DRM_DEBUG_KMS("AUX interval %d, out of range (max 4)\n", in drm_dp_link_train_channel_eq_delay()
189 drm_dp_dump_access(const struct drm_dp_aux *aux, in drm_dp_dump_access() argument
195 drm_dbg(DRM_UT_DP, "%s: 0x%05x AUX %s (ret=%3d) %*ph\n", in drm_dp_dump_access()
196 aux->name, offset, arrow, ret, min(ret, 20), buffer); in drm_dp_dump_access()
198 drm_dbg(DRM_UT_DP, "%s: 0x%05x AUX %s (ret=%3d)\n", in drm_dp_dump_access()
199 aux->name, offset, arrow, ret); in drm_dp_dump_access()
205 * The DisplayPort AUX channel is an abstraction to allow generic, driver-
206 * independent access to AUX functionality. Drivers can take advantage of
211 * Both native and I2C-over-AUX transactions are supported.
214 static int drm_dp_dpcd_access(struct drm_dp_aux *aux, u8 request, in drm_dp_dpcd_access() argument
227 mutex_lock(&aux->hw_mutex); in drm_dp_dpcd_access()
232 * aux i2c transactions but real world devices this wasn't in drm_dp_dpcd_access()
241 ret = aux->transfer(aux, &msg); in drm_dp_dpcd_access()
267 mutex_unlock(&aux->hw_mutex); in drm_dp_dpcd_access()
273 * @aux: DisplayPort AUX channel
281 * function returns -EPROTO. Errors from the underlying AUX channel transfer
285 ssize_t drm_dp_dpcd_read(struct drm_dp_aux *aux, unsigned int offset, in drm_dp_dpcd_read() argument
302 ret = drm_dp_dpcd_access(aux, DP_AUX_NATIVE_READ, DP_DPCD_REV, buffer, in drm_dp_dpcd_read()
307 ret = drm_dp_dpcd_access(aux, DP_AUX_NATIVE_READ, offset, buffer, in drm_dp_dpcd_read()
311 drm_dp_dump_access(aux, DP_AUX_NATIVE_READ, offset, buffer, ret); in drm_dp_dpcd_read()
318 * @aux: DisplayPort AUX channel
326 * function returns -EPROTO. Errors from the underlying AUX channel transfer
330 ssize_t drm_dp_dpcd_write(struct drm_dp_aux *aux, unsigned int offset, in drm_dp_dpcd_write() argument
335 ret = drm_dp_dpcd_access(aux, DP_AUX_NATIVE_WRITE, offset, buffer, in drm_dp_dpcd_write()
337 drm_dp_dump_access(aux, DP_AUX_NATIVE_WRITE, offset, buffer, ret); in drm_dp_dpcd_write()
344 * @aux: DisplayPort AUX channel
350 int drm_dp_dpcd_read_link_status(struct drm_dp_aux *aux, in drm_dp_dpcd_read_link_status() argument
353 return drm_dp_dpcd_read(aux, DP_LANE0_1_STATUS, status, in drm_dp_dpcd_read_link_status()
360 * @aux: DisplayPort AUX channel
369 int drm_dp_link_probe(struct drm_dp_aux *aux, struct drm_dp_link *link) in drm_dp_link_probe() argument
376 err = drm_dp_dpcd_read(aux, DP_DPCD_REV, values, sizeof(values)); in drm_dp_link_probe()
393 * @aux: DisplayPort AUX channel
398 int drm_dp_link_power_up(struct drm_dp_aux *aux, struct drm_dp_link *link) in drm_dp_link_power_up() argument
407 err = drm_dp_dpcd_readb(aux, DP_SET_POWER, &value); in drm_dp_link_power_up()
414 err = drm_dp_dpcd_writeb(aux, DP_SET_POWER, value); in drm_dp_link_power_up()
431 * @aux: DisplayPort AUX channel
436 int drm_dp_link_power_down(struct drm_dp_aux *aux, struct drm_dp_link *link) in drm_dp_link_power_down() argument
445 err = drm_dp_dpcd_readb(aux, DP_SET_POWER, &value); in drm_dp_link_power_down()
452 err = drm_dp_dpcd_writeb(aux, DP_SET_POWER, value); in drm_dp_link_power_down()
462 * @aux: DisplayPort AUX channel
467 int drm_dp_link_configure(struct drm_dp_aux *aux, struct drm_dp_link *link) in drm_dp_link_configure() argument
478 err = drm_dp_dpcd_write(aux, DP_LINK_BW_SET, values, sizeof(values)); in drm_dp_link_configure()
563 * @aux: DisplayPort AUX channel
568 int drm_dp_downstream_id(struct drm_dp_aux *aux, char id[6]) in drm_dp_downstream_id() argument
570 return drm_dp_dpcd_read(aux, DP_BRANCH_ID, id, 6); in drm_dp_downstream_id()
579 * @aux: DisplayPort AUX channel
584 const u8 port_cap[4], struct drm_dp_aux *aux) in drm_dp_downstream_debug() argument
630 drm_dp_downstream_id(aux, id); in drm_dp_downstream_debug()
633 len = drm_dp_dpcd_read(aux, DP_BRANCH_HW_REV, &rev[0], 1); in drm_dp_downstream_debug()
638 len = drm_dp_dpcd_read(aux, DP_BRANCH_SW_REV, rev, 2); in drm_dp_downstream_debug()
661 * I2C-over-AUX implementation
694 * Calculate the duration of the AUX request/reply in usec. Gives the
739 /* AUX bitrate is 1MHz, i2c bitrate as specified */ in drm_dp_i2c_msg_duration()
748 * i2c and AUX transfers.
770 * Transfer a single I2C-over-AUX message and handle various error conditions,
777 static int drm_dp_i2c_do_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg) in drm_dp_i2c_do_msg() argument
784 * before giving up the AUX transaction. in drm_dp_i2c_do_msg()
791 ret = aux->transfer(aux, msg); in drm_dp_i2c_do_msg()
814 * For I2C-over-AUX transactions this isn't enough, we in drm_dp_i2c_do_msg()
854 aux->i2c_nack_count++; in drm_dp_i2c_do_msg()
863 aux->i2c_defer_count++; in drm_dp_i2c_do_msg()
894 static int drm_dp_i2c_drain_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *orig_msg) in drm_dp_i2c_drain_msg() argument
900 err = drm_dp_i2c_do_msg(aux, &msg); in drm_dp_i2c_drain_msg()
918 * Bizlink designed DP->DVI-D Dual Link adapters require the I2C over AUX
925 "Number of bytes to transfer in a single I2C over DP AUX CH message, (1-16, default 16)");
930 struct drm_dp_aux *aux = adapter->algo_data; in drm_dp_i2c_xfer() local
949 err = drm_dp_i2c_do_msg(aux, &msg); in drm_dp_i2c_xfer()
968 err = drm_dp_i2c_drain_msg(aux, &msg); in drm_dp_i2c_xfer()
992 (void)drm_dp_i2c_do_msg(aux, &msg); in drm_dp_i2c_xfer()
1028 static int drm_dp_aux_get_crc(struct drm_dp_aux *aux, u8 *crc) in drm_dp_aux_get_crc() argument
1033 ret = drm_dp_dpcd_readb(aux, DP_TEST_SINK, &buf); in drm_dp_aux_get_crc()
1039 ret = drm_dp_dpcd_readb(aux, DP_TEST_SINK_MISC, &buf); in drm_dp_aux_get_crc()
1044 if (count == aux->crc_count) in drm_dp_aux_get_crc()
1047 aux->crc_count = count; in drm_dp_aux_get_crc()
1053 ret = drm_dp_dpcd_read(aux, DP_TEST_CRC_R_CR, crc, 6); in drm_dp_aux_get_crc()
1062 struct drm_dp_aux *aux = container_of(work, struct drm_dp_aux, in drm_dp_aux_crc_work() local
1069 if (WARN_ON(!aux->crtc)) in drm_dp_aux_crc_work()
1072 crtc = aux->crtc; in drm_dp_aux_crc_work()
1078 ret = drm_dp_aux_get_crc(aux, crc_bytes); in drm_dp_aux_crc_work()
1081 ret = drm_dp_aux_get_crc(aux, crc_bytes); in drm_dp_aux_crc_work()
1101 * drm_dp_aux_init() - minimally initialise an aux channel
1102 * @aux: DisplayPort AUX channel
1109 void drm_dp_aux_init(struct drm_dp_aux *aux) in drm_dp_aux_init() argument
1111 mutex_init(&aux->hw_mutex); in drm_dp_aux_init()
1112 mutex_init(&aux->cec.lock); in drm_dp_aux_init()
1113 INIT_WORK(&aux->crc_work, drm_dp_aux_crc_work); in drm_dp_aux_init()
1115 aux->ddc.algo = &drm_dp_i2c_algo; in drm_dp_aux_init()
1116 aux->ddc.algo_data = aux; in drm_dp_aux_init()
1117 aux->ddc.retries = 3; in drm_dp_aux_init()
1119 aux->ddc.lock_ops = &drm_dp_i2c_lock_ops; in drm_dp_aux_init()
1124 * drm_dp_aux_register() - initialise and register aux channel
1125 * @aux: DisplayPort AUX channel
1131 int drm_dp_aux_register(struct drm_dp_aux *aux) in drm_dp_aux_register() argument
1135 if (!aux->ddc.algo) in drm_dp_aux_register()
1136 drm_dp_aux_init(aux); in drm_dp_aux_register()
1138 aux->ddc.class = I2C_CLASS_DDC; in drm_dp_aux_register()
1139 aux->ddc.owner = THIS_MODULE; in drm_dp_aux_register()
1140 aux->ddc.dev.parent = aux->dev; in drm_dp_aux_register()
1142 strlcpy(aux->ddc.name, aux->name ? aux->name : dev_name(aux->dev), in drm_dp_aux_register()
1143 sizeof(aux->ddc.name)); in drm_dp_aux_register()
1145 ret = drm_dp_aux_register_devnode(aux); in drm_dp_aux_register()
1149 ret = i2c_add_adapter(&aux->ddc); in drm_dp_aux_register()
1151 drm_dp_aux_unregister_devnode(aux); in drm_dp_aux_register()
1160 * drm_dp_aux_unregister() - unregister an AUX adapter
1161 * @aux: DisplayPort AUX channel
1163 void drm_dp_aux_unregister(struct drm_dp_aux *aux) in drm_dp_aux_unregister() argument
1165 drm_dp_aux_unregister_devnode(aux); in drm_dp_aux_unregister()
1166 i2c_del_adapter(&aux->ddc); in drm_dp_aux_unregister()
1205 * @aux: DisplayPort AUX channel
1210 int drm_dp_start_crc(struct drm_dp_aux *aux, struct drm_crtc *crtc) in drm_dp_start_crc() argument
1215 ret = drm_dp_dpcd_readb(aux, DP_TEST_SINK, &buf); in drm_dp_start_crc()
1219 ret = drm_dp_dpcd_writeb(aux, DP_TEST_SINK, buf | DP_TEST_SINK_START); in drm_dp_start_crc()
1223 aux->crc_count = 0; in drm_dp_start_crc()
1224 aux->crtc = crtc; in drm_dp_start_crc()
1225 schedule_work(&aux->crc_work); in drm_dp_start_crc()
1233 * @aux: DisplayPort AUX channel
1237 int drm_dp_stop_crc(struct drm_dp_aux *aux) in drm_dp_stop_crc() argument
1242 ret = drm_dp_dpcd_readb(aux, DP_TEST_SINK, &buf); in drm_dp_stop_crc()
1246 ret = drm_dp_dpcd_writeb(aux, DP_TEST_SINK, buf & ~DP_TEST_SINK_START); in drm_dp_stop_crc()
1250 flush_work(&aux->crc_work); in drm_dp_stop_crc()
1251 aux->crtc = NULL; in drm_dp_stop_crc()
1304 * @aux: DisplayPort AUX channel
1313 int drm_dp_read_desc(struct drm_dp_aux *aux, struct drm_dp_desc *desc, in drm_dp_read_desc() argument
1320 ret = drm_dp_dpcd_read(aux, offset, ident, sizeof(*ident)); in drm_dp_read_desc()