Re: [PATCH] radeonfb: Let hwmon driver probe the "monid" I2C bus
From: Alexander Goomenyuk <hidden>
Date: 2011-02-02 05:50:16
On Thu, 2011-01-13 at 14:44 +1000, Dave Airlie wrote:
On Thu, Jan 13, 2011 at 2:11 PM, Paul Mundt [off-list ref] wrote:quoted
On Tue, Jan 11, 2011 at 04:23:52PM +0100, Jean Delvare wrote:quoted
Some Radeon cards have an I2C-based thermal sensor chip connected to the "monid" I2C bus. Set the I2C probing class of this bus properly so that hwmon drivers can detect devices on it and bind to them. This closes kernel.org bug #26172.The radeon BIOS actually contains a table to tell us what chip is on the bus, in the KMS driver we read this table and load the appropriate hwmon device, There could possibly be other things on this bus than hw monitor devices. Though radeonfb should be considered mostly dead. Dave.
I have tried radeon KMS driver.
modinfo output:
filename: /lib/modules/2.6.36-tuxonice-r3/kernel/drivers/gpu/drm/radeon/radeon.ko
depends:
drm,drm_kms_helper,ttm,fb,i2c-core,cfbfillrect,cfbimgblt,cfbcopyarea,i2c-algo-bit
vermagic: 2.6.36-tuxonice-r3 SMP mod_unload 686
parm: no_wb:Disable AGP writeback for scratch
registers (int)
parm: modeset:Disable/Enable modesetting (int)
parm: dynclks:Disable/Enable dynamic clocks (int)
parm: r4xx_atom:Enable ATOMBIOS modesetting for R4xx
(int)
parm: vramlimit:Restrict VRAM for testing (int)
parm: agpmode:AGP Mode (-1 = PCI) (int)
parm: gartsize:Size of PCIE/IGP gart to setup in
megabytes (32,64, etc)
(int)
parm: benchmark:Run benchmark (int)
parm: test:Run tests (int)
parm: connector_table:Force connector table (int)
parm: tv:TV enable (0 = disable) (int)
parm: new_pll:Select new PLL code (int)
parm: audio:Audio enable (0 = disable) (int)
parm: disp_priority:Display Priority (0 = auto, 1 normal, 2 = high) (int)
parm: hw_i2c:hw i2c engine enable (0 = disable) (int)
But it also need modifications in order to be used by lm63 hwmon driver.
1. MONID line is disable by combios_setup_i2c_bus() for RV380 because
of:
case CHIP_RV350:
case CHIP_RV380:
case CHIP_RS400:
case CHIP_RS480:
switch (ddc_line) {
case RADEON_GPIO_VGA_DDC:
case RADEON_GPIO_DVI_DDC:
+ i2c.hw_capable = true;
- i2c.hw_capable = false;
break;
case RADEON_GPIO_MONID:
/* hw i2c on RADEON_GPIO_MONID doesn't seem to work
* reliably on some pre-r4xx hardware; not sure why
*/
i2c.hw_capable = true;
break;
extracted from the sources.
It would be nice if there will be some driver parameter to control this
behavior. Or/and control it in kernel configuration menu.
2. MONID adapter is not registered as HWMON capable.
So I have added the following line into radeon_combios_i2c_init():
} else if (rdev->family >= CHIP_R300) {
i2c = combios_setup_i2c_bus(rdev, DDC_MONID, 0, 0);
rdev->i2c_bus[3] = radeon_i2c_create(dev, &i2c, "MONID");
+ rdev->i2c_bus[3]->adapter.class = I2C_CLASS_HWMON;
Now I see GPU temperature using lm_sensors.
P.S. There is also strange side effect after reloading radeon driver
from X console: the screen switch off. So I have to switch between
virtual console and X. Is it an bug?