[Jan 14] KDE Neon (20190113-1500) - Pinebook1080P / Pinebook |[Jan 14] Q4OS (2.7-r1) - Pinebook1080P / Pinebook | [Dec 07] DietPi(v6.18) - Pinebook / Manjaro KDE (preview3) / Manjaro LXQT (preview3) - Pinebook |[Dec 06] Armbian Debian Stretch (5.67) / Armbian Ubuntu 18.04 Bionic Desktop (5.67) - RockPro64 |[Dec 05] DietPi(v6.18) - 1080P Pinebook

Project Inspiration | Get Started | IRC Logs | Forum Rules/Policy


Some problems with kernel module und device tree..
#1
Hello guys,

I'm developing a kernel driver for a MOST NIC and have got some problems by reading the chip configuration from device tree.

Here is the configuration:

Code:
&i2c2 {
    pinctrl-names = "default";
    pinctrl-0 = <&i2c2_pins_a>;
    status = "okay";
    
    os8104: [email protected] {
        compatible = "smsc,os8104";
        reg = <0x41>;
        master = <0>;
        bypass = <0>;
        
        gpio_reset = <&pio 8 17>;    /* PI17 */
        gpio_int = <&pio 8 16>;        /* PI16 */
        gpio_aint = <&pio 8 19>;    /* PI19 */
        gpio_error = <&pio 8 18>;    /* PI18 */
    };
};

My NIC (os8104) is connected to i2c-2. 

And here is the corresponding code in LKM:

Code:
static int os8104_probe(struct i2c_client *client, const struct i2c_device_id *id) {
    struct device_node *dn;
    int rc;
    int master = 0, bypass = 0;
    struct os8104 *priv;

    dn = of_find_node_by_name(NULL, os8104_driver.driver.name);
    if (dn == NULL) {
        return -ENODEV;
    }

    rc = of_property_read_u32(dn, "master", &master);
    pr_err("rc = %d, master = %11d\n", rc, master);
    
    rc = of_property_read_u32(dn, "bypass", &bypass);
    pr_err("rc = %d, bypass = %11d\n", rc, bypass);

    priv = devm_kzalloc(&client->dev, sizeof(*priv), GFP_KERNEL);

    if (!priv) {
        return -ENOMEM;
    }

    priv->adapter = to_i2c_adapter(client->dev.parent);
    priv->client = client;
    priv->mode = val;
    
    priv->gpio_reset = of_get_named_gpio(dn, "gpio_reset", 0);
    priv->gpio_int = of_get_named_gpio(dn, "gpio_int", 0);
    priv->gpio_aint = of_get_named_gpio(dn, "gpio_aint", 0);
    priv->gpio_error = of_get_named_gpio(dn, "gpio_error", 0);
    
    return 0;
}

If I'm loading the module, the function of_find_node_by_name find my os8104 node, then I'm able to read the both properties (master and bypass). 

But, if I do an of_get_named_gpio(dn, "gpio_reset", 0), I get for each of four gpio-properties

Quote:[ 1610.330108] OF: /[email protected]/[email protected]/[email protected]: arguments longer than property

in dmesg.

Any ideas?

Kernel version is 4.14.39 and SBC is a BananaPRO (Allwinner A20 SoC).

Many thanks. Smile
Reply


Possibly Related Threads...
Thread Author Replies Views Last Post
  On the matter of the proposed Pine64 mobile device (a potentially unpopular opinion) hiccupstix 8 620 01-12-2019, 05:43 AM
Last Post: saboteur
  New EMMC module not working jsfrederick 4 565 02-09-2018, 09:57 PM
Last Post: jsfrederick

Forum Jump:


Users browsing this thread: 1 Guest(s)