[haiku-commits] haiku: hrev46552 - src/add-ons/accelerants/radeon_hd

  • From: kallisti5@xxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 18 Dec 2013 00:30:03 +0100 (CET)

hrev46552 adds 1 changeset to branch 'master'
old head: 77ac2d8d8d7a7071392c0c70cba0e7a008ee0b29
new head: bd1c4402bf965a2bb7e8d7e4e36761c04c559073
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=bd1c440+%5E77ac2d8

----------------------------------------------------------------------------

bd1c440: radeon_hd: Improve DisplayPort function return logic
  
  * Was putting status_t into int's and creating
    some logic problems when it came to DisplayPort
    link training.

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev46552
Commit:      bd1c4402bf965a2bb7e8d7e4e36761c04c559073
URL:         http://cgit.haiku-os.org/haiku/commit/?id=bd1c440
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Tue Dec 17 23:34:11 2013 UTC

----------------------------------------------------------------------------

2 files changed, 38 insertions(+), 31 deletions(-)
.../accelerants/radeon_hd/displayport.cpp        | 63 +++++++++++---------
src/add-ons/accelerants/radeon_hd/displayport.h  |  6 +-

----------------------------------------------------------------------------

diff --git a/src/add-ons/accelerants/radeon_hd/displayport.cpp 
b/src/add-ons/accelerants/radeon_hd/displayport.cpp
index c777285..1bea9dd 100644
--- a/src/add-ons/accelerants/radeon_hd/displayport.cpp
+++ b/src/add-ons/accelerants/radeon_hd/displayport.cpp
@@ -30,7 +30,7 @@
 #define ERROR(x...) _sPrintf("radeon_hd: " x)
 
 
-static int
+static status_t
 dp_aux_speak(uint32 hwPin, uint8* send, int sendBytes,
        uint8* recv, int recvBytes, uint8 delay, uint8* ack)
 {
@@ -84,11 +84,11 @@ dp_aux_speak(uint32 hwPin, uint8* send, int sendBytes,
        if (recv && recvBytes)
                memcpy(recv, base + 16, recvLength);
 
-       return recvLength;
+       return B_OK;
 }
 
 
-int
+status_t
 dp_aux_write(uint32 hwPin, uint16 address,
        uint8* send, uint8 sendBytes, uint8 delay)
 {
@@ -107,16 +107,16 @@ dp_aux_write(uint32 hwPin, uint16 address,
        uint8 retry;
        for (retry = 0; retry < 4; retry++) {
                uint8 ack;
-               int result = dp_aux_speak(hwPin, auxMessage, auxMessageBytes,
+               status_t result = dp_aux_speak(hwPin, auxMessage, 
auxMessageBytes,
                        NULL, 0, delay, &ack);
 
                if (result == B_BUSY)
                        continue;
-               else if (result < B_OK)
+               else if (result != B_OK)
                        return result;
 
                if ((ack & AUX_NATIVE_REPLY_MASK) == AUX_NATIVE_REPLY_ACK)
-                       return sendBytes;
+                       return B_OK;
                else if ((ack & AUX_NATIVE_REPLY_MASK) == 
AUX_NATIVE_REPLY_DEFER)
                        snooze(400);
                else
@@ -127,7 +127,7 @@ dp_aux_write(uint32 hwPin, uint16 address,
 }
 
 
-int
+status_t
 dp_aux_read(uint32 hwPin, uint16 address,
        uint8* recv, int recvBytes, uint8 delay)
 {
@@ -142,16 +142,16 @@ dp_aux_read(uint32 hwPin, uint16 address,
        uint8 retry;
        for (retry = 0; retry < 4; retry++) {
                uint8 ack;
-               int result = dp_aux_speak(hwPin, auxMessage, auxMessageBytes,
+               status_t result = dp_aux_speak(hwPin, auxMessage, 
auxMessageBytes,
                        recv, recvBytes, delay, &ack);
 
                if (result == B_BUSY)
                        continue;
-               else if (result < B_OK)
+               else if (result != B_OK)
                        return result;
 
                if ((ack & AUX_NATIVE_REPLY_MASK) == AUX_NATIVE_REPLY_ACK)
-                       return result;
+                       return B_OK; 
                else if ((ack & AUX_NATIVE_REPLY_MASK) == 
AUX_NATIVE_REPLY_DEFER)
                        snooze(400);
                else
@@ -165,7 +165,9 @@ dp_aux_read(uint32 hwPin, uint16 address,
 void
 dpcd_reg_write(uint32 hwPin, uint16 address, uint8 value)
 {
-       dp_aux_write(hwPin, address, &value, 1, 0);
+       status_t result = dp_aux_write(hwPin, address, &value, 1, 0);
+       if (result != B_OK)
+               ERROR("%s: error on DisplayPort aux write (0x%lX)\n", __func__, 
result);
 }
 
 
@@ -173,14 +175,17 @@ uint8
 dpcd_reg_read(uint32 hwPin, uint16 address)
 {
        uint8 value = 0;
-       dp_aux_read(hwPin, address, &value, 1, 0);
+       status_t result = dp_aux_read(hwPin, address, &value, 1, 0);
+       if (result != B_OK)
+               ERROR("%s: error on DisplayPort aux read (0x%lX)\n", __func__, 
result);
 
        return value;
 }
 
 
 status_t
-dp_aux_get_i2c_byte(uint32 hwPin, uint16 address, uint8* data, bool start, 
bool stop)
+dp_aux_get_i2c_byte(uint32 hwPin, uint16 address, uint8* data,
+       bool start, bool stop)
 {
        uint8 auxMessage[5];
        int auxMessageBytes = 4; // 4 for read
@@ -207,12 +212,12 @@ dp_aux_get_i2c_byte(uint32 hwPin, uint16 address, uint8* 
data, bool start, bool
                uint8 reply[2];
                int replyBytes = 1;
 
-               int result = dp_aux_speak(hwPin, auxMessage, auxMessageBytes,
+               status_t result = dp_aux_speak(hwPin, auxMessage, 
auxMessageBytes,
                        reply, replyBytes, 0, &ack);
                if (result == B_BUSY)
                        continue;
-               else if (result < 0) {
-                       ERROR("%s: aux_ch failed: %d\n", __func__, result);
+               else if (result != B_OK) {
+                       ERROR("%s: aux_ch speak failed 0x%lX\n", __func__, 
result);
                        return B_ERROR;
                }
 
@@ -257,7 +262,8 @@ dp_aux_get_i2c_byte(uint32 hwPin, uint16 address, uint8* 
data, bool start, bool
 
 
 status_t
-dp_aux_set_i2c_byte(uint32 hwPin, uint16 address, uint8* data, bool start, 
bool stop)
+dp_aux_set_i2c_byte(uint32 hwPin, uint16 address, uint8* data,
+       bool start, bool stop)
 {
        uint8 auxMessage[5];
        int auxMessageBytes = 5; // 5 for write
@@ -285,12 +291,12 @@ dp_aux_set_i2c_byte(uint32 hwPin, uint16 address, uint8* 
data, bool start, bool
                uint8 reply[2];
                int replyBytes = 1;
 
-               int result = dp_aux_speak(hwPin, auxMessage, auxMessageBytes,
+               status_t result = dp_aux_speak(hwPin, auxMessage, 
auxMessageBytes,
                        reply, replyBytes, 0, &ack);
                if (result == B_BUSY)
                        continue;
-               else if (result < 0) {
-                       ERROR("%s: aux_ch failed: %d\n", __func__, result);
+               else if (result != B_OK) {
+                       ERROR("%s: aux_ch speak failed 0x%lX\n", __func__, 
result);
                        return B_ERROR;
                }
 
@@ -440,10 +446,9 @@ dp_setup_connectors()
                dpInfo->auxPin = auxPin;
 
                uint8 auxMessage[25];
-               int result;
 
-               result = dp_aux_read(auxPin, DP_DPCD_REV, auxMessage, 8, 0);
-               if (result > 0) {
+               status_t result = dp_aux_read(auxPin, DP_DPCD_REV, auxMessage, 
8, 0);
+               if (result == B_OK) {
                        dpInfo->valid = true;
                        memcpy(dpInfo->config, auxMessage, 8);
                }
@@ -454,10 +459,10 @@ dp_setup_connectors()
 static bool
 dp_get_link_status(dp_info* dp)
 {
-       int result = dp_aux_read(dp->auxPin, DP_LANE_STATUS_0_1,
+       status_t result = dp_aux_read(dp->auxPin, DP_LANE_STATUS_0_1,
                dp->linkStatus, DP_LINK_STATUS_SIZE, 100);
 
-       if (result <= 0) {
+       if (result != B_OK) {
                ERROR("%s: DisplayPort link status failed\n", __func__);
                return false;
        }
@@ -913,11 +918,11 @@ ddc2_dp_read_edid1(uint32 connectorIndex, edid1_info* 
edid)
        dp_aux_get_i2c_byte(dpInfo->auxPin, 0x50, rdata, true, false);
 
        for (uint32 i = 0; i < sizeof(raw); i++) {
-               status_t ret = dp_aux_get_i2c_byte(dpInfo->auxPin, 0x50,
+               status_t result = dp_aux_get_i2c_byte(dpInfo->auxPin, 0x50,
                        rdata++, false, false);
-               if (ret) {
-                       TRACE("%s: error reading EDID data at index %d, ret = 
%d\n",
-                                       __func__, i, ret);
+               if (result != B_OK) {
+                       TRACE("%s: error reading EDID data at index " B_PRIu32 
", "
+                               "result = 0x%lX\n", __func__, i, result);
                        dp_aux_get_i2c_byte(dpInfo->auxPin, 0x50, &sdata, 
false, true);
                        return false;
                }
diff --git a/src/add-ons/accelerants/radeon_hd/displayport.h 
b/src/add-ons/accelerants/radeon_hd/displayport.h
index 46c97fa..262106a 100644
--- a/src/add-ons/accelerants/radeon_hd/displayport.h
+++ b/src/add-ons/accelerants/radeon_hd/displayport.h
@@ -26,10 +26,12 @@
 uint8 dpcd_reg_read(uint32 hwPin, uint16 address);
 void dpcd_reg_write(uint32 hwPin, uint16 address, uint8 value);
 
-int dp_aux_write(uint32 hwPin, uint16 address, uint8* send,
+// Communication over DisplayPort AUX channel
+status_t dp_aux_write(uint32 hwPin, uint16 address, uint8* send,
        uint8 sendBytes, uint8 delay);
-int dp_aux_read(uint32 hwPin, uint16 address, uint8* recv,
+status_t dp_aux_read(uint32 hwPin, uint16 address, uint8* recv,
        int recvBytes, uint8 delay);
+
 status_t dp_aux_set_i2c_byte(uint32 hwPin, uint16 address,
        uint8* data, bool start, bool stop);
 status_t dp_aux_get_i2c_byte(uint32 hwPin, uint16 address,


Other related posts:

  • » [haiku-commits] haiku: hrev46552 - src/add-ons/accelerants/radeon_hd - kallisti5