[Feb 26] Recalbox beta v3.1- Rock64 |[Feb 26] Recalbox 190222- RockPro64 / Minimal Debian by mrfixit2001 - 190222 - RockPro64 |[Feb 26] Q4OS 2.7-r2 - Pinebook 1080P / Pinebook |[Feb 22] Batocera Linux 5.20-20190121- RockPro64 | [Feb 19] Manjaro KDE 19.02 / Manjaro LXQT 19.02 - Pinebook1080P / Pinebook | [Feb 19] Slackware Aarch64 Miniroot and XFCE 20190201 - RockPro | [Feb 19] Slackware Aarch64 Miniroot and XFCE 20190201 - Rock64

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 20 1,401 02-06-2019, 03:45 PM
Last Post: tllim
  New EMMC module not working jsfrederick 4 629 02-09-2018, 09:57 PM
Last Post: jsfrederick

Forum Jump:


Users browsing this thread: 1 Guest(s)