Hans Ulrich Niedermann writes:
I have recently taken a look at the lists of supported devices in radeonhd. As far as I can tell, we have four of those:
1. The wiki page: http://wiki.x.org/wiki/radeonhd 2. In the radeonhd source tree: 2a. src/rhd.h (enum RHD_CHIPSETS) 2b. src/rhd_id.c (void RHDIdentify()) 2c. man/radeonhd.man (section SUPPORTED HARDWARE)
I have a patch lying around from last october which automatically updates man/radeonhd.man from src/rhd_id.c whenever src/rhd_id.c is changed. It was not accepted then, but I have just forward-ported it to current git in order to check whether the man page is up to date.
I'm sorry that this patch got dropped on the floor. We probably all overlooked it.
While testing it, I noticed that radeonhd.man contains stuff not in rhd_id.c, rhd_id.c contains stuff not in radeonhd.man, and rhd.h contains stuff not in either of the others.
Specifically, rhd_id.c has one more name for RV670 than radeonhd.man, and:
rhd.h rhd_id.c radeonhd.man M86 yes no yes RS780 yes yes no RV770 yes yes no RS740 yes no no
I can easily submit a patch for radeonhd.man bringing it in sync with rhd_id.c, but what about M86 and RS740?
I've also got a patch (see below) which attempts to bring all of them in sync. RS740 should be identical to RS690 (although we have not seen any, yet). We have not had a chance to test an M86 but it should be a mobile RV635. We haven't seen one but the patch will enable it (People seemed to have added these ids to their code already and had reported problems, however to track them better it's good to have support for them added to the master in our git repo. Ndim, please feel free to commit your fixes. We should definitely have your fix to autogenerate the man page information and keep it in sync (we may have to fix the information strings in rhd_id.c, though). Cheers, Egbert. diff --git a/src/rhd_i2c.c b/src/rhd_i2c.c index 2e9ae9e..f34c659 100644 --- a/src/rhd_i2c.c +++ b/src/rhd_i2c.c @@ -173,6 +173,10 @@ enum _rhdRS69I2CBits { RS69_DC_I2C_SW_DONE_ACK = (0x1 << 1), /* RS69_DC_I2C_SW_STATUS */ RS69_DC_I2C_SW_DONE = (0x1 << 2), + RS69_DC_I2C_SW_ABORTED = (0x1 << 4), + RS69_DC_I2C_SW_TIMEOUT = (0x1 << 5), + RS69_DC_I2C_SW_INTERRUPTED= (0x1 << 6), + RS69_DC_I2C_SW_BUFFER_OVERFLOW= (0x1 << 7), RS69_DC_I2C_SW_STOPPED_ON_NACK = (0x1 << 8), RS69_DC_I2C_SW_NACK0 = (0x1 << 12), RS69_DC_I2C_SW_NACK1 = (0x1 << 13) @@ -446,7 +450,11 @@ rhdRS69I2CStatus(I2CBusPtr I2CPtr) } RHDRegMask(I2CPtr, RS69_DC_I2C_INTERRUPT_CONTROL, RS69_DC_I2C_SW_DONE_ACK, RS69_DC_I2C_SW_DONE_ACK); - if (!count || (val & (RS69_DC_I2C_SW_STOPPED_ON_NACK | RS69_DC_I2C_SW_NACK0 | RS69_DC_I2C_SW_NACK1 | 0x3))) + if (!count || (val & (RS69_DC_I2C_SW_STOPPED_ON_NACK + | RS69_DC_I2C_SW_ABORTED | RS69_DC_I2C_SW_TIMEOUT + | RS69_DC_I2C_SW_INTERRUPTED + | RS69_DC_I2C_SW_BUFFER_OVERFLOW + | RS69_DC_I2C_SW_NACK0 | RS69_DC_I2C_SW_NACK1 | 0x3))) return FALSE; /* 2 */ return TRUE; /* 1 */ } @@ -616,7 +624,10 @@ rhdR6xxI2CStatus(I2CBusPtr I2CPtr) } RHDRegMask(I2CPtr, R6_DC_I2C_INTERRUPT_CONTROL, R6_DC_I2C_SW_DONE_ACK, R6_DC_I2C_SW_DONE_ACK); - if (!count || (val & (R6_DC_I2C_SW_STOPPED_ON_NACK | R6_DC_I2C_SW_NACK0 | R6_DC_I2C_SW_NACK1 | 0x3))) + if (!count || (val & ( R6_DC_I2C_SW_ABORTED | R6_DC_I2C_SW_TIMEOUT + | R6_DC_I2C_SW_INTERRUPTED | R6_DC_I2C_SW_BUFFER_OVERFLOW + | R6_DC_I2C_SW_STOPPED_ON_NACK + | R6_DC_I2C_SW_NACK0 | R6_DC_I2C_SW_NACK1 | 0x3))) return FALSE; /* 2 */ return TRUE; /* 1 */ }