Registering radeon display connectors fails due to missing adapter
name. The problem surfaced after this commit to Linus' kernel tree:

commit 2236baa75f704851d3cd3310569058151acb1f06
Author: Jean Delvare <khali at linux-fr.org>
Date:   Mon Nov 15 22:40:38 2010 +0100

    i2c: Sanity checks on adapter registration

    Make sure I2C adapters being registered have the required struct
    fields set. If they don't, problems will happen later.

    Signed-off-by: Jean Delvare <khali at linux-fr.org>

diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index d231f68..6b4cc56 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -848,6 +848,18 @@ static int i2c_register_adapter(struct i2c_adapter *adap)
                goto out_list;
        }

+       /* Sanity checks */
+       if (unlikely(adap->name[0] == '\0')) {
+               pr_err("i2c-core: Attempt to register an adapter with "
+                      "no name!\n");
+               return -EINVAL;
+       }
+       if (unlikely(!adap->algo)) {
+               pr_err("i2c-core: Attempt to register adapter '%s' with "
+                      "no algo!\n", adap->name);
+               return -EINVAL;
+       }
+
        rt_mutex_init(&adap->bus_lock);
        mutex_init(&adap->userspace_clients_lock);
        INIT_LIST_HEAD(&adap->userspace_clients);



dmesg output that shows the problem:
[ ? ?3.870533] i2c-core: Attempt to register an adapter with no name!
[ ? ?3.870591] [drm] Failed to register i2c DP-auxch
[ ? ?3.870647] i2c-core: Attempt to register an adapter with no name!
[ ? ?3.870708] [drm] Failed to register i2c DP-auxch
[ ? ?3.870821] [drm] Radeon Display Connectors
[ ? ?3.870824] [drm] Connector 0:
[ ? ?3.870825] [drm] ? DVI-I
[ ? ?3.870827] [drm] ? HPD1
[ ? ?3.870829] [drm] ? DDC: 0x7e20 0x7e20 0x7e24 0x7e24 0x7e28 0x7e28
0x7e2c 0x7e2c
[ ? ?3.870831] [drm] ? Encoders:
[ ? ?3.870833] [drm] ? ? CRT2: INTERNAL_KLDSCP_DAC2
[ ? ?3.870834] [drm] ? ? DFP1: INTERNAL_UNIPHY

The corresponding output was originally like this:
[ ? ?3.781507] [drm] Radeon Display Connectors
[ ? ?3.781510] [drm] Connector 0:
[ ? ?3.781511] [drm] ? DisplayPort
[ ? ?3.781513] [drm] ? HPD2
[ ? ?3.781515] [drm] ? DDC: 0x7e50 0x7e50 0x7e54 0x7e54 0x7e58 0x7e58
0x7e5c 0x7e5c
[ ? ?3.781517] [drm] ? Encoders:
[ ? ?3.781518] [drm] ? ? DFP2: INTERNAL_UNIPHY1
[ ? ?3.781520] [drm] Connector 1:
[ ? ?3.781521] [drm] ? DisplayPort
[ ? ?3.781522] [drm] ? HPD3
[ ? ?3.781524] [drm] ? DDC: 0x7f10 0x7f10 0x7f14 0x7f14 0x7f18 0x7f18
0x7f1c 0x7f1c
[ ? ?3.781526] [drm] ? Encoders:
[ ? ?3.781528] [drm] ? ? DFP3: INTERNAL_UNIPHY1
[ ? ?3.781529] [drm] Connector 2:
[ ? ?3.781531] [drm] ? DVI-I
[ ? ?3.781532] [drm] ? HPD1
[ ? ?3.781534] [drm] ? DDC: 0x7e20 0x7e20 0x7e24 0x7e24 0x7e28 0x7e28
0x7e2c 0x7e2c
[ ? ?3.781535] [drm] ? Encoders:
[ ? ?3.781537] [drm] ? ? CRT2: INTERNAL_KLDSCP_DAC2
[ ? ?3.781538] [drm] ? ? DFP1: INTERNAL_UNIPHY

A change like this fixes the problem:

diff --git a/drivers/gpu/drm/radeon/radeon_i2c.c
b/drivers/gpu/drm/radeon/radeon_i2c.c
index 0cfbba0..65d05c0 100644
--- a/drivers/gpu/drm/radeon/radeon_i2c.c
+++ b/drivers/gpu/drm/radeon/radeon_i2c.c
@@ -946,6 +946,7 @@ struct radeon_i2c_chan
*radeon_i2c_create_dp(struct drm_device *dev,
?? ? ? ?i2c->rec = *rec;
?? ? ? ?i2c->adapter.owner = THIS_MODULE;
?? ? ? ?i2c->dev = dev;
+ ? ? ? sprintf(i2c->adapter.name, "Radeon i2c bus %s", name);
?? ? ? ?i2c_set_adapdata(&i2c->adapter, i2c);
?? ? ? ?i2c->adapter.algo_data = &i2c->algo.dp;
?? ? ? ?i2c->algo.dp.aux_ch = radeon_dp_i2c_aux_ch;

Reply via email to