reg_num = DIV_ROUND_UP(size, HIBMC_BYTES_IN_U32); for (i = 0; i < reg_num; i++) { /* number of bytes read from a single register */
num = min(size - i * HIBMC_BYTES_IN_U32, HIBMC_BYTES_IN_U32);
value = readl(dp->base + HIBMC_DP_AUX_RD_DATA0 + i * HIBMC_BYTES_IN_U32); /* convert the 32-bit value of the register to the buffer. */ for (j = 0; j < num; j++)
buf[i * HIBMC_BYTES_IN_U32 + j] = value >> (j * BITS_IN_U8);
}
}
reg_num = DIV_ROUND_UP(size, HIBMC_BYTES_IN_U32); for (i = 0; i < reg_num; i++) { /* number of bytes written to a single register */
num = min_t(u8, size - i * HIBMC_BYTES_IN_U32, HIBMC_BYTES_IN_U32);
value = 0; /* obtain the 32-bit value written to a single register. */ for (j = 0; j < num; j++)
value |= buf[i * HIBMC_BYTES_IN_U32 + j] << (j * BITS_IN_U8); /* writing data to a single register */
writel(value, dp->base + HIBMC_DP_AUX_WR_DATA0 + i * HIBMC_BYTES_IN_U32);
}
}
/* ret >= 0, ret is size; ret < 0, ret is err code */ staticint hibmc_dp_aux_parse_xfer(struct hibmc_dp_dev *dp, struct drm_dp_aux_msg *msg)
{
u32 buf_data_cnt;
u32 aux_status;
switch (msg->request) { case DP_AUX_NATIVE_WRITE: return msg->size; case DP_AUX_I2C_WRITE | DP_AUX_I2C_MOT: if (buf_data_cnt == HIBMC_AUX_I2C_WRITE_SUCCESS) return msg->size; else return FIELD_GET(HIBMC_DP_CFG_AUX, aux_status); case DP_AUX_NATIVE_READ: case DP_AUX_I2C_READ | DP_AUX_I2C_MOT:
buf_data_cnt--; if (buf_data_cnt != msg->size) { /* only the successful part of data is read */ return -EBUSY;
}
/* all data is successfully read */
hibmc_dp_aux_read_data(dp, msg->buffer, msg->size); return msg->size; default: return -EINVAL;
}
}
/* ret >= 0 ,ret is size; ret < 0, ret is err code */ static ssize_t hibmc_dp_aux_xfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
{ struct hibmc_dp *dp_priv = container_of(aux, struct hibmc_dp, aux); struct hibmc_dp_dev *dp = dp_priv->dp_dev;
u32 aux_cmd; int ret;
u32 val; /* val will be assigned at the beginning of readl_poll_timeout function */
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.