radeon_hd: Fix missing subtraction of MOT in case.
* DP i2c edid byte-bang working again
This commit is contained in:
@@ -149,17 +149,19 @@ dp_aux_transaction(uint32 connectorIndex, dp_aux_msg* message)
|
|||||||
|
|
||||||
uint8 transactionSize = 4;
|
uint8 transactionSize = 4;
|
||||||
|
|
||||||
switch(message->request) {
|
switch(message->request & ~DP_AUX_I2C_MOT) {
|
||||||
case DP_AUX_NATIVE_WRITE:
|
case DP_AUX_NATIVE_WRITE:
|
||||||
case DP_AUX_I2C_WRITE:
|
case DP_AUX_I2C_WRITE:
|
||||||
if (message->buffer == NULL) {
|
|
||||||
ERROR("%s: DP message uninitalized buffer!\n", __func__);
|
|
||||||
return B_ERROR;
|
|
||||||
}
|
|
||||||
transactionSize += message->size;
|
transactionSize += message->size;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If not bare address, check for buffer
|
||||||
|
if (message->size > 0 && message->buffer == NULL) {
|
||||||
|
ERROR("%s: DP message uninitalized buffer!\n", __func__);
|
||||||
|
return B_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
uint8 auxMessage[20];
|
uint8 auxMessage[20];
|
||||||
auxMessage[0] = message->address & 0xff;
|
auxMessage[0] = message->address & 0xff;
|
||||||
auxMessage[1] = message->address >> 8;
|
auxMessage[1] = message->address >> 8;
|
||||||
@@ -332,11 +334,13 @@ dp_aux_set_i2c_byte(uint32 connectorIndex, uint16 address, uint8* data,
|
|||||||
message.address = address;
|
message.address = address;
|
||||||
message.buffer = data;
|
message.buffer = data;
|
||||||
message.request = DP_AUX_I2C_WRITE;
|
message.request = DP_AUX_I2C_WRITE;
|
||||||
|
message.size = 1;
|
||||||
if (stop == false)
|
if (stop == false)
|
||||||
message.request |= DP_AUX_I2C_MOT;
|
message.request |= DP_AUX_I2C_MOT;
|
||||||
message.size = 1;
|
if (stop || start) {
|
||||||
if (stop || start)
|
message.buffer = NULL;
|
||||||
message.size = 0;
|
message.size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
for (int attempt = 0; attempt < 7; attempt++) {
|
for (int attempt = 0; attempt < 7; attempt++) {
|
||||||
status_t result = dp_aux_transaction(connectorIndex, &message);
|
status_t result = dp_aux_transaction(connectorIndex, &message);
|
||||||
@@ -1010,6 +1014,7 @@ ddc2_dp_read_edid1(uint32 connectorIndex, edid1_info* edid)
|
|||||||
dp_aux_set_i2c_byte(connectorIndex, 0x50, &sdata, true, false);
|
dp_aux_set_i2c_byte(connectorIndex, 0x50, &sdata, true, false);
|
||||||
dp_aux_set_i2c_byte(connectorIndex, 0x50, &sdata, false, false);
|
dp_aux_set_i2c_byte(connectorIndex, 0x50, &sdata, false, false);
|
||||||
dp_aux_get_i2c_byte(connectorIndex, 0x50, rdata, true, false);
|
dp_aux_get_i2c_byte(connectorIndex, 0x50, rdata, true, false);
|
||||||
|
|
||||||
for (uint32 i = 0; i < sizeof(raw); i++) {
|
for (uint32 i = 0; i < sizeof(raw); i++) {
|
||||||
status_t result = dp_aux_get_i2c_byte(connectorIndex, 0x50,
|
status_t result = dp_aux_get_i2c_byte(connectorIndex, 0x50,
|
||||||
rdata++, false, false);
|
rdata++, false, false);
|
||||||
|
|||||||
Reference in New Issue
Block a user