aux_ch
int (*aux_ch) (struct i2c_adapter *adapter,
ret = (*algo_data->aux_ch)(adapter, mode,
intel_dp->algo.aux_ch = cdv_intel_dp_i2c_aux_ch;
dig_port->aux_ch = intel_dp_aux_ch(intel_encoder);
if (dig_port->aux_ch == AUX_CH_NONE)
static enum aux_ch map_aux_ch(struct intel_display *display, u8 aux_channel)
enum aux_ch intel_bios_dp_aux_ch(const struct intel_bios_encoder_data *devdata)
enum aux_ch;
enum aux_ch intel_bios_dp_aux_ch(const struct intel_bios_encoder_data *devdata);
dig_port->aux_ch = intel_dp_aux_ch(encoder);
if (dig_port->aux_ch == AUX_CH_NONE)
return intel_display_power_aux_io_domain(display, dig_port->aux_ch);
return intel_display_power_tbt_aux_domain(display, dig_port->aux_ch);
return intel_display_power_legacy_aux_domain(display, dig_port->aux_ch);
enum aux_ch aux_ch_start;
enum aux_ch aux_ch_end;
intel_port_domains_for_aux_ch(struct intel_display *display, enum aux_ch aux_ch)
if (aux_ch >= domains[i].aux_ch_start && aux_ch <= domains[i].aux_ch_end)
intel_display_power_aux_io_domain(struct intel_display *display, enum aux_ch aux_ch)
const struct intel_ddi_port_domains *domains = intel_port_domains_for_aux_ch(display, aux_ch);
return domains->aux_io + (int)(aux_ch - domains->aux_ch_start);
intel_display_power_legacy_aux_domain(struct intel_display *display, enum aux_ch aux_ch)
const struct intel_ddi_port_domains *domains = intel_port_domains_for_aux_ch(display, aux_ch);
return domains->aux_legacy_usbc + (int)(aux_ch - domains->aux_ch_start);
intel_display_power_tbt_aux_domain(struct intel_display *display, enum aux_ch aux_ch)
const struct intel_ddi_port_domains *domains = intel_port_domains_for_aux_ch(display, aux_ch);
return domains->aux_tbt + (int)(aux_ch - domains->aux_ch_start);
enum aux_ch;
intel_display_power_aux_io_domain(struct intel_display *display, enum aux_ch aux_ch);
intel_display_power_legacy_aux_domain(struct intel_display *display, enum aux_ch aux_ch);
intel_display_power_tbt_aux_domain(struct intel_display *display, enum aux_ch aux_ch);
I915_PW("AUX_A", &icl_pwdoms_aux_a, .xelpdp.aux_ch = AUX_CH_A),
I915_PW("AUX_B", &icl_pwdoms_aux_b, .xelpdp.aux_ch = AUX_CH_B),
I915_PW("AUX_TC1", &xelpdp_pwdoms_aux_tc1, .xelpdp.aux_ch = AUX_CH_USBC1),
I915_PW("AUX_TC2", &xelpdp_pwdoms_aux_tc2, .xelpdp.aux_ch = AUX_CH_USBC2),
I915_PW("AUX_TC3", &xelpdp_pwdoms_aux_tc3, .xelpdp.aux_ch = AUX_CH_USBC3),
I915_PW("AUX_TC4", &xelpdp_pwdoms_aux_tc4, .xelpdp.aux_ch = AUX_CH_USBC4),
I915_PW("AUX_A", &icl_pwdoms_aux_a, .xelpdp.aux_ch = AUX_CH_A),
I915_PW("AUX_B", &icl_pwdoms_aux_b, .xelpdp.aux_ch = AUX_CH_B),
I915_PW("AUX_TC1", &xelpdp_pwdoms_aux_tc1, .xelpdp.aux_ch = AUX_CH_USBC1),
I915_PW("AUX_TC2", &xelpdp_pwdoms_aux_tc2, .xelpdp.aux_ch = AUX_CH_USBC2),
enum aux_ch aux_ch = i915_power_well_instance(power_well)->xelpdp.aux_ch;
aux_ch_to_digital_port(display, aux_ch));
intel_de_rmw(display, XELPDP_DP_AUX_CH_CTL(display, aux_ch),
if (intel_de_wait_for_set_ms(display, XELPDP_DP_AUX_CH_CTL(display, aux_ch),
enum aux_ch aux_ch = i915_power_well_instance(power_well)->xelpdp.aux_ch;
intel_de_rmw(display, XELPDP_DP_AUX_CH_CTL(display, aux_ch),
if (intel_de_wait_for_clear_ms(display, XELPDP_DP_AUX_CH_CTL(display, aux_ch),
enum aux_ch aux_ch = i915_power_well_instance(power_well)->xelpdp.aux_ch;
return intel_de_read(display, XELPDP_DP_AUX_CH_CTL(display, aux_ch)) &
static enum aux_ch icl_aux_pw_to_ch(const struct i915_power_well *power_well)
enum aux_ch aux_ch)
if (dig_port && dig_port->aux_ch == aux_ch)
enum aux_ch aux_ch = icl_aux_pw_to_ch(power_well);
struct intel_digital_port *dig_port = aux_ch_to_digital_port(display, aux_ch);
static bool intel_aux_ch_is_edp(struct intel_display *display, enum aux_ch aux_ch)
struct intel_digital_port *dig_port = aux_ch_to_digital_port(display, aux_ch);
enum aux_ch aux_ch = icl_aux_pw_to_ch(power_well);
struct intel_digital_port *dig_port = aux_ch_to_digital_port(display, aux_ch);
intel_de_rmw(display, DP_AUX_CH_CTL(aux_ch),
u8 aux_ch;
enum aux_ch aux_ch;
if (dig_port->aux_ch == AUX_CH_A)
if (dig_port->aux_ch != AUX_CH_A && HAS_PCH_LPT_H(display)) {
char *buf, int size, enum aux_ch aux_ch)
if (DISPLAY_VER(display) >= 13 && aux_ch >= AUX_CH_D_XELPD)
snprintf(buf, size, "%c", 'A' + aux_ch - AUX_CH_D_XELPD + AUX_CH_D);
else if (DISPLAY_VER(display) >= 12 && aux_ch >= AUX_CH_USBC1)
snprintf(buf, size, "USBC%c", '1' + aux_ch - AUX_CH_USBC1);
snprintf(buf, size, "%c", 'A' + aux_ch);
enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
return VLV_DP_AUX_CH_CTL(aux_ch);
MISSING_CASE(aux_ch);
enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
return VLV_DP_AUX_CH_DATA(aux_ch, index);
MISSING_CASE(aux_ch);
enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
return DP_AUX_CH_CTL(aux_ch);
MISSING_CASE(aux_ch);
enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
return DP_AUX_CH_DATA(aux_ch, index);
MISSING_CASE(aux_ch);
enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
return DP_AUX_CH_CTL(aux_ch);
return PCH_DP_AUX_CH_CTL(aux_ch);
MISSING_CASE(aux_ch);
enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
return DP_AUX_CH_DATA(aux_ch, index);
return PCH_DP_AUX_CH_DATA(aux_ch, index);
MISSING_CASE(aux_ch);
enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
return DP_AUX_CH_CTL(aux_ch);
MISSING_CASE(aux_ch);
enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
return DP_AUX_CH_DATA(aux_ch, index);
MISSING_CASE(aux_ch);
enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
return DP_AUX_CH_CTL(aux_ch);
MISSING_CASE(aux_ch);
enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
return DP_AUX_CH_DATA(aux_ch, index);
MISSING_CASE(aux_ch);
enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
return XELPDP_DP_AUX_CH_CTL(display, aux_ch);
MISSING_CASE(aux_ch);
enum aux_ch aux_ch = dig_port->aux_ch;
switch (aux_ch) {
return XELPDP_DP_AUX_CH_DATA(display, aux_ch, index);
MISSING_CASE(aux_ch);
enum aux_ch aux_ch = dig_port->aux_ch;
aux_ch_name(display, buf, sizeof(buf), aux_ch),
static enum aux_ch default_aux_ch(struct intel_encoder *encoder)
return (enum aux_ch)encoder->port;
enum aux_ch aux_ch)
if (enc_to_dig_port(other)->aux_ch == aux_ch)
enum aux_ch intel_dp_aux_ch(struct intel_encoder *encoder)
enum aux_ch aux_ch;
aux_ch = intel_bios_dp_aux_ch(encoder->devdata);
if (aux_ch == AUX_CH_NONE) {
aux_ch = default_aux_ch(encoder);
if (aux_ch == AUX_CH_NONE)
other = get_encoder_by_aux_ch(encoder, aux_ch);
aux_ch_name(display, buf, sizeof(buf), aux_ch),
aux_ch_name(display, buf, sizeof(buf), aux_ch), source);
return aux_ch;
enum aux_ch;
enum aux_ch intel_dp_aux_ch(struct intel_encoder *encoder);
#define __xe2lpd_aux_ch_idx(aux_ch) \
(aux_ch >= AUX_CH_USBC1 ? aux_ch : AUX_CH_USBC4 + 1 + (aux_ch) - AUX_CH_A)
#define DP_AUX_CH_CTL(aux_ch) _MMIO_PORT(aux_ch, _DPA_AUX_CH_CTL, \
#define VLV_DP_AUX_CH_CTL(aux_ch) _MMIO(VLV_DISPLAY_BASE + \
_PORT(aux_ch, _DPA_AUX_CH_CTL, _DPB_AUX_CH_CTL))
#define PCH_DP_AUX_CH_CTL(aux_ch) _MMIO_PORT((aux_ch) - AUX_CH_B, _PCH_DPB_AUX_CH_CTL, _PCH_DPC_AUX_CH_CTL)
#define _XELPDP_DP_AUX_CH_CTL(aux_ch) \
_MMIO(_PICK_EVEN_2RANGES(aux_ch, AUX_CH_USBC1, \
#define XELPDP_DP_AUX_CH_CTL(i915__, aux_ch) \
_XELPDP_DP_AUX_CH_CTL(__xe2lpd_aux_ch_idx(aux_ch)) : \
_XELPDP_DP_AUX_CH_CTL(aux_ch))
#define DP_AUX_CH_DATA(aux_ch, i) _MMIO(_PORT(aux_ch, _DPA_AUX_CH_DATA1, \
#define VLV_DP_AUX_CH_DATA(aux_ch, i) _MMIO(VLV_DISPLAY_BASE + _PORT(aux_ch, _DPA_AUX_CH_DATA1, \
#define PCH_DP_AUX_CH_DATA(aux_ch, i) _MMIO(_PORT((aux_ch) - AUX_CH_B, _PCH_DPB_AUX_CH_DATA1, _PCH_DPC_AUX_CH_DATA1) + (i) * 4) /* 5 registers */
#define _XELPDP_DP_AUX_CH_DATA(aux_ch, i) \
_MMIO(_PICK_EVEN_2RANGES(aux_ch, AUX_CH_USBC1, \
#define XELPDP_DP_AUX_CH_DATA(i915__, aux_ch, i) \
_XELPDP_DP_AUX_CH_DATA(__xe2lpd_aux_ch_idx(aux_ch), i) : \
_XELPDP_DP_AUX_CH_DATA(aux_ch, i))
dig_port->aux_ch = AUX_CH_NONE;
intel_display_power_legacy_aux_domain(display, dig_port->aux_ch);
return intel_display_power_legacy_aux_domain(display, dig_port->aux_ch);
return intel_display_power_legacy_aux_domain(display, dig_port->aux_ch);
i2c_edid->aux_ch.i2c_over_aux_ch = true;
i2c_edid->aux_ch.aux_ch_mot = true;
edid->aux_ch.i2c_over_aux_ch = false;
edid->aux_ch.aux_ch_mot = false;
struct intel_vgpu_i2c_aux_ch aux_ch;