From mboxrd@z Thu Jan 1 00:00:00 1970 From: Johan Hovold Subject: [RFC PATCH 1/3] USB: serial: add device-tree support Date: Fri, 25 May 2018 14:52:55 +0200 Message-ID: <20180525125257.29124-2-johan@kernel.org> References: <20180525125257.29124-1-johan@kernel.org> Return-path: In-Reply-To: <20180525125257.29124-1-johan@kernel.org> Sender: linux-kernel-owner@vger.kernel.org To: Rob Herring Cc: Mark Rutland , Johan Hovold , Greg Kroah-Hartman , Ricardo Ribalda Delgado , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, linux-serial@vger.kernel.org List-Id: linux-serial@vger.kernel.org Lookup and associate serial-port device-tree nodes given a parent USB-interface node during probe. Note that a serial-port node must be named "serial" and have a "reg" property so that ports on multi-port interfaces can be distinguished. &usb_interface { #address-cells = <1>; #size-cells = <0>; serial@0 { reg = <0>; }; }; FIXME: binding doc Not-signed-off-by: Johan Hovold --- drivers/usb/serial/usb-serial.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index 44ecf0e2be9d..5a7ebe1e9fd6 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c @@ -35,6 +35,7 @@ #include #include #include +#include #define DRIVER_AUTHOR "Greg Kroah-Hartman " #define DRIVER_DESC "USB Serial Driver core" @@ -97,7 +98,6 @@ static int allocate_minors(struct usb_serial *serial, int num_ports) if (minor < 0) goto error; port->minor = minor; - port->port_number = i; } serial->minors_reserved = 1; mutex_unlock(&table_lock); @@ -589,6 +589,7 @@ static void usb_serial_port_release(struct device *dev) kfifo_free(&port->write_fifo); kfree(port->interrupt_in_buffer); kfree(port->interrupt_out_buffer); + of_node_put(dev->of_node); tty_port_destroy(&port->port); kfree(port); } @@ -857,6 +858,29 @@ static int setup_port_interrupt_out(struct usb_serial_port *port, return 0; } +/* FIXME: move to separate compilation unit? */ +static struct device_node *find_port_node(struct usb_interface *intf, int port) +{ + struct device_node *node; + u32 reg; + + for_each_child_of_node(intf->dev.of_node, node) { + if (!node->name || of_node_cmp(node->name, "serial") != 0) + continue; + + if (of_property_read_u32(node, "reg", ®)) + continue; + + if (reg == port) + break; + } + + dev_dbg(&intf->dev, "node %pOF, port %d: %pOFP\n", intf->dev.of_node, + port, node); + + return node; +} + static int usb_serial_probe(struct usb_interface *interface, const struct usb_device_id *id) { @@ -963,6 +987,7 @@ static int usb_serial_probe(struct usb_interface *interface, retval = -ENOMEM; goto err_free_epds; } + port->port_number = i; tty_port_init(&port->port); port->port.ops = &serial_port_ops; port->serial = serial; @@ -976,6 +1001,7 @@ static int usb_serial_probe(struct usb_interface *interface, port->dev.bus = &usb_serial_bus_type; port->dev.release = &usb_serial_port_release; port->dev.groups = usb_serial_port_groups; + port->dev.of_node = find_port_node(interface, port->port_number); device_initialize(&port->dev); } -- 2.17.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [RFC,1/3] USB: serial: add device-tree support From: Johan Hovold Message-Id: <20180525125257.29124-2-johan@kernel.org> Date: Fri, 25 May 2018 14:52:55 +0200 To: Rob Herring Cc: Mark Rutland , Johan Hovold , Greg Kroah-Hartman , Ricardo Ribalda Delgado , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, linux-serial@vger.kernel.org List-ID: TG9va3VwIGFuZCBhc3NvY2lhdGUgc2VyaWFsLXBvcnQgZGV2aWNlLXRyZWUgbm9kZXMgZ2l2ZW4g YSBwYXJlbnQKVVNCLWludGVyZmFjZSBub2RlIGR1cmluZyBwcm9iZS4KCk5vdGUgdGhhdCBhIHNl cmlhbC1wb3J0IG5vZGUgbXVzdCBiZSBuYW1lZCAic2VyaWFsIiBhbmQgaGF2ZSBhICJyZWciCnBy b3BlcnR5IHNvIHRoYXQgcG9ydHMgb24gbXVsdGktcG9ydCBpbnRlcmZhY2VzIGNhbiBiZSBkaXN0 aW5ndWlzaGVkLgoKCSZ1c2JfaW50ZXJmYWNlIHsKCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKCQkj c2l6ZS1jZWxscyA9IDwwPjsKCgkJc2VyaWFsQDAgewoJCQlyZWcgPSA8MD47CgkJfTsKCX07CgpG SVhNRTogYmluZGluZyBkb2MKCk5vdC1zaWduZWQtb2ZmLWJ5OiBKb2hhbiBIb3ZvbGQgPGpvaGFu QGtlcm5lbC5vcmc+Ci0tLQogZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyB8IDI4ICsr KysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNlcnRpb25z KCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1z ZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggNDRlY2YwZTJi ZTlkLi41YTdlYmUxZTlmZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2Vy aWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwpAQCAtMzUsNiArMzUs NyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9rZmlm by5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAKICNk ZWZpbmUgRFJJVkVSX0FVVEhPUiAiR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3Vu ZGF0aW9uLm9yZz4iCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgU2VyaWFsIERyaXZlciBjb3Jl IgpAQCAtOTcsNyArOTgsNiBAQCBzdGF0aWMgaW50IGFsbG9jYXRlX21pbm9ycyhzdHJ1Y3QgdXNi X3NlcmlhbCAqc2VyaWFsLCBpbnQgbnVtX3BvcnRzKQogCQlpZiAobWlub3IgPCAwKQogCQkJZ290 byBlcnJvcjsKIAkJcG9ydC0+bWlub3IgPSBtaW5vcjsKLQkJcG9ydC0+cG9ydF9udW1iZXIgPSBp OwogCX0KIAlzZXJpYWwtPm1pbm9yc19yZXNlcnZlZCA9IDE7CiAJbXV0ZXhfdW5sb2NrKCZ0YWJs ZV9sb2NrKTsKQEAgLTU4OSw2ICs1ODksNyBAQCBzdGF0aWMgdm9pZCB1c2Jfc2VyaWFsX3BvcnRf cmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJa2ZpZm9fZnJlZSgmcG9ydC0+d3JpdGVfZmlm byk7CiAJa2ZyZWUocG9ydC0+aW50ZXJydXB0X2luX2J1ZmZlcik7CiAJa2ZyZWUocG9ydC0+aW50 ZXJydXB0X291dF9idWZmZXIpOworCW9mX25vZGVfcHV0KGRldi0+b2Zfbm9kZSk7CiAJdHR5X3Bv cnRfZGVzdHJveSgmcG9ydC0+cG9ydCk7CiAJa2ZyZWUocG9ydCk7CiB9CkBAIC04NTcsNiArODU4 LDI5IEBAIHN0YXRpYyBpbnQgc2V0dXBfcG9ydF9pbnRlcnJ1cHRfb3V0KHN0cnVjdCB1c2Jfc2Vy aWFsX3BvcnQgKnBvcnQsCiAJcmV0dXJuIDA7CiB9CiAKKy8qIEZJWE1FOiBtb3ZlIHRvIHNlcGFy YXRlIGNvbXBpbGF0aW9uIHVuaXQ/ICovCitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpmaW5k X3BvcnRfbm9kZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgaW50IHBvcnQpCit7CisJc3Ry dWN0IGRldmljZV9ub2RlICpub2RlOworCXUzMiByZWc7CisKKwlmb3JfZWFjaF9jaGlsZF9vZl9u b2RlKGludGYtPmRldi5vZl9ub2RlLCBub2RlKSB7CisJCWlmICghbm9kZS0+bmFtZSB8fCBvZl9u b2RlX2NtcChub2RlLT5uYW1lLCAic2VyaWFsIikgIT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWlm IChvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAicmVnIiwgJnJlZykpCisJCQljb250aW51ZTsK KworCQlpZiAocmVnID09IHBvcnQpCisJCQlicmVhazsKKwl9CisKKwlkZXZfZGJnKCZpbnRmLT5k ZXYsICJub2RlICVwT0YsIHBvcnQgJWQ6ICVwT0ZQXG4iLCBpbnRmLT5kZXYub2Zfbm9kZSwKKwkJ CXBvcnQsIG5vZGUpOworCisJcmV0dXJuIG5vZGU7Cit9CisKIHN0YXRpYyBpbnQgdXNiX3Nlcmlh bF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAogCQkJICAgICAgIGNvbnN0 IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKQEAgLTk2Myw2ICs5ODcsNyBAQCBzdGF0aWMg aW50IHVzYl9zZXJpYWxfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKIAkJ CXJldHZhbCA9IC1FTk9NRU07CiAJCQlnb3RvIGVycl9mcmVlX2VwZHM7CiAJCX0KKwkJcG9ydC0+ cG9ydF9udW1iZXIgPSBpOwogCQl0dHlfcG9ydF9pbml0KCZwb3J0LT5wb3J0KTsKIAkJcG9ydC0+ cG9ydC5vcHMgPSAmc2VyaWFsX3BvcnRfb3BzOwogCQlwb3J0LT5zZXJpYWwgPSBzZXJpYWw7CkBA IC05NzYsNiArMTAwMSw3IEBAIHN0YXRpYyBpbnQgdXNiX3NlcmlhbF9wcm9iZShzdHJ1Y3QgdXNi X2ludGVyZmFjZSAqaW50ZXJmYWNlLAogCQlwb3J0LT5kZXYuYnVzID0gJnVzYl9zZXJpYWxfYnVz X3R5cGU7CiAJCXBvcnQtPmRldi5yZWxlYXNlID0gJnVzYl9zZXJpYWxfcG9ydF9yZWxlYXNlOwog CQlwb3J0LT5kZXYuZ3JvdXBzID0gdXNiX3NlcmlhbF9wb3J0X2dyb3VwczsKKwkJcG9ydC0+ZGV2 Lm9mX25vZGUgPSBmaW5kX3BvcnRfbm9kZShpbnRlcmZhY2UsIHBvcnQtPnBvcnRfbnVtYmVyKTsK IAkJZGV2aWNlX2luaXRpYWxpemUoJnBvcnQtPmRldik7CiAJfQogCg==