05-14-2018, 02:32 AM
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:
My NIC (os8104) is connected to i2c-2.
And here is the corresponding code in LKM:
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
in dmesg.
Any ideas?
Kernel version is 4.14.39 and SBC is a BananaPRO (Allwinner A20 SoC).
Many thanks.
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: os8104@41 {
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: /soc@01c00000/i2c@01c2b400/os8104@41: arguments longer than property
in dmesg.
Any ideas?
Kernel version is 4.14.39 and SBC is a BananaPRO (Allwinner A20 SoC).
Many thanks.