From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chanwoo Choi Subject: Re: [PATCH v5 5/6] extcon: add possibility to get extcon device by OF node Date: Tue, 27 Feb 2018 20:03:14 +0900 Message-ID: <5A953AF2.6030501@samsung.com> References: <20180227071134.28063-1-a.hajda@samsung.com> <20180227071134.28063-6-a.hajda@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT Return-path: In-reply-to: <20180227071134.28063-6-a.hajda@samsung.com> Sender: linux-kernel-owner@vger.kernel.org To: Andrzej Hajda , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" Cc: Bartlomiej Zolnierkiewicz , Marek Szyprowski , dri-devel@lists.freedesktop.org, Inki Dae , Rob Herring , Mark Rutland , Krzysztof Kozlowski , Archit Taneja , Laurent Pinchart , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-usb@vger.kernel.org List-Id: linux-samsung-soc@vger.kernel.org Hi, On 2018년 02월 27일 16:11, Andrzej Hajda wrote: > Since extcon property is not allowed in DT, extcon subsystem requires > another way to get extcon device. Lets try the simplest approach - get > edev by of_node. > > Signed-off-by: Andrzej Hajda > Acked-by: Chanwoo Choi > --- > v5: function renamed to extcon_find_edev_by_node (Andy) > v2: changed label to follow local convention (Chanwoo) > --- > drivers/extcon/extcon.c | 44 ++++++++++++++++++++++++++++++++++---------- > include/linux/extcon.h | 6 ++++++ > 2 files changed, 40 insertions(+), 10 deletions(-) > > diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c > index cb38c2747684..47a5ca9eb86d 100644 > --- a/drivers/extcon/extcon.c > +++ b/drivers/extcon/extcon.c > @@ -1336,6 +1336,28 @@ void extcon_dev_unregister(struct extcon_dev *edev) > EXPORT_SYMBOL_GPL(extcon_dev_unregister); > > #ifdef CONFIG_OF > + > +/* > + * extcon_find_edev_by_node - Find the extcon device from devicetree. > + * @node : OF node identyfying edev s/identyfying/identifying > + * > + * Return the pointer of extcon device if success or ERR_PTR(err) if fail. > + */ > +struct extcon_dev *extcon_find_edev_by_node(struct device_node *node) > +{ > + struct extcon_dev *edev; > + > + mutex_lock(&extcon_dev_list_lock); > + list_for_each_entry(edev, &extcon_dev_list, entry) > + if (edev->dev.parent && edev->dev.parent->of_node == node) > + goto out; > + edev = ERR_PTR(-EPROBE_DEFER); > +out: > + mutex_unlock(&extcon_dev_list_lock); > + > + return edev; > +} > + > /* > * extcon_get_edev_by_phandle - Get the extcon device from devicetree. > * @dev : the instance to the given device > @@ -1363,25 +1385,27 @@ struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev, int index) > return ERR_PTR(-ENODEV); > } > > - mutex_lock(&extcon_dev_list_lock); > - list_for_each_entry(edev, &extcon_dev_list, entry) { > - if (edev->dev.parent && edev->dev.parent->of_node == node) { > - mutex_unlock(&extcon_dev_list_lock); > - of_node_put(node); > - return edev; > - } > - } > - mutex_unlock(&extcon_dev_list_lock); > + edev = extcon_find_edev_by_node(node); > of_node_put(node); > > - return ERR_PTR(-EPROBE_DEFER); > + return edev; > } > + > #else > + > +struct extcon_dev *extcon_find_edev_by_node(struct device_node *node) > +{ > + return ERR_PTR(-ENOSYS); > +} > + > struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev, int index) > { > return ERR_PTR(-ENOSYS); > } > + > #endif /* CONFIG_OF */ > + > +EXPORT_SYMBOL_GPL(extcon_find_edev_by_node); > EXPORT_SYMBOL_GPL(extcon_get_edev_by_phandle); > > /** > diff --git a/include/linux/extcon.h b/include/linux/extcon.h > index 6d94e82c8ad9..7f033b1ea568 100644 > --- a/include/linux/extcon.h > +++ b/include/linux/extcon.h > @@ -230,6 +230,7 @@ extern void devm_extcon_unregister_notifier_all(struct device *dev, > * Following APIs get the extcon_dev from devicetree or by through extcon name. > */ > extern struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name); > +extern struct extcon_dev *extcon_find_edev_by_node(struct device_node *node); > extern struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev, > int index); > > @@ -283,6 +284,11 @@ static inline struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name) > return ERR_PTR(-ENODEV); > } > > +static inline struct extcon_dev *extcon_find_edev_by_node(struct device_node *node) > +{ > + return ERR_PTR(-ENODEV); > +} > + > static inline struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev, > int index) > { > -- Best Regards, Chanwoo Choi Samsung Electronics 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: [v5,5/6] extcon: add possibility to get extcon device by OF node From: Chanwoo Choi Message-Id: <5A953AF2.6030501@samsung.com> Date: Tue, 27 Feb 2018 20:03:14 +0900 To: Andrzej Hajda , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" Cc: Bartlomiej Zolnierkiewicz , Marek Szyprowski , dri-devel@lists.freedesktop.org, Inki Dae , Rob Herring , Mark Rutland , Krzysztof Kozlowski , Archit Taneja , Laurent Pinchart , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-usb@vger.kernel.org List-ID: SGksCgpPbiAyMDE464WEIDAy7JuUIDI37J28IDE2OjExLCBBbmRyemVqIEhhamRhIHdyb3RlOgo+ IFNpbmNlIGV4dGNvbiBwcm9wZXJ0eSBpcyBub3QgYWxsb3dlZCBpbiBEVCwgZXh0Y29uIHN1YnN5 c3RlbSByZXF1aXJlcwo+IGFub3RoZXIgd2F5IHRvIGdldCBleHRjb24gZGV2aWNlLiBMZXRzIHRy eSB0aGUgc2ltcGxlc3QgYXBwcm9hY2ggLSBnZXQKPiBlZGV2IGJ5IG9mX25vZGUuCj4gCj4gU2ln bmVkLW9mZi1ieTogQW5kcnplaiBIYWpkYSA8YS5oYWpkYUBzYW1zdW5nLmNvbT4KPiBBY2tlZC1i eTogQ2hhbndvbyBDaG9pIDxjdzAwLmNob2lAc2Ftc3VuZy5jb20+Cj4gLS0tCj4gdjU6IGZ1bmN0 aW9uIHJlbmFtZWQgdG8gZXh0Y29uX2ZpbmRfZWRldl9ieV9ub2RlIChBbmR5KQo+IHYyOiBjaGFu Z2VkIGxhYmVsIHRvIGZvbGxvdyBsb2NhbCBjb252ZW50aW9uIChDaGFud29vKQo+IC0tLQo+ICBk cml2ZXJzL2V4dGNvbi9leHRjb24uYyB8IDQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKystLS0tLS0tLS0tCj4gIGluY2x1ZGUvbGludXgvZXh0Y29uLmggIHwgIDYgKysrKysrCj4g IDIgZmlsZXMgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCj4gCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZXh0Y29uL2V4dGNvbi5jIGIvZHJpdmVycy9leHRjb24vZXh0 Y29uLmMKPiBpbmRleCBjYjM4YzI3NDc2ODQuLjQ3YTVjYTllYjg2ZCAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2V4dGNvbi9leHRjb24uYwo+ICsrKyBiL2RyaXZlcnMvZXh0Y29uL2V4dGNvbi5jCj4g QEAgLTEzMzYsNiArMTMzNiwyOCBAQCB2b2lkIGV4dGNvbl9kZXZfdW5yZWdpc3RlcihzdHJ1Y3Qg ZXh0Y29uX2RldiAqZWRldikKPiAgRVhQT1JUX1NZTUJPTF9HUEwoZXh0Y29uX2Rldl91bnJlZ2lz dGVyKTsKPiAgCj4gICNpZmRlZiBDT05GSUdfT0YKPiArCj4gKy8qCj4gKyAqIGV4dGNvbl9maW5k X2VkZXZfYnlfbm9kZSAtIEZpbmQgdGhlIGV4dGNvbiBkZXZpY2UgZnJvbSBkZXZpY2V0cmVlLgo+ ICsgKiBAbm9kZQk6IE9GIG5vZGUgaWRlbnR5ZnlpbmcgZWRldgoKcy9pZGVudHlmeWluZy9pZGVu dGlmeWluZwoKPiArICoKPiArICogUmV0dXJuIHRoZSBwb2ludGVyIG9mIGV4dGNvbiBkZXZpY2Ug aWYgc3VjY2VzcyBvciBFUlJfUFRSKGVycikgaWYgZmFpbC4KPiArICovCj4gK3N0cnVjdCBleHRj b25fZGV2ICpleHRjb25fZmluZF9lZGV2X2J5X25vZGUoc3RydWN0IGRldmljZV9ub2RlICpub2Rl KQo+ICt7Cj4gKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZWRldjsKPiArCj4gKwltdXRleF9sb2NrKCZl eHRjb25fZGV2X2xpc3RfbG9jayk7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVkZXYsICZleHRj b25fZGV2X2xpc3QsIGVudHJ5KQo+ICsJCWlmIChlZGV2LT5kZXYucGFyZW50ICYmIGVkZXYtPmRl di5wYXJlbnQtPm9mX25vZGUgPT0gbm9kZSkKPiArCQkJZ290byBvdXQ7Cj4gKwllZGV2ID0gRVJS X1BUUigtRVBST0JFX0RFRkVSKTsKPiArb3V0Ogo+ICsJbXV0ZXhfdW5sb2NrKCZleHRjb25fZGV2 X2xpc3RfbG9jayk7Cj4gKwo+ICsJcmV0dXJuIGVkZXY7Cj4gK30KPiArCj4gIC8qCj4gICAqIGV4 dGNvbl9nZXRfZWRldl9ieV9waGFuZGxlIC0gR2V0IHRoZSBleHRjb24gZGV2aWNlIGZyb20gZGV2 aWNldHJlZS4KPiAgICogQGRldgkJOiB0aGUgaW5zdGFuY2UgdG8gdGhlIGdpdmVuIGRldmljZQo+ IEBAIC0xMzYzLDI1ICsxMzg1LDI3IEBAIHN0cnVjdCBleHRjb25fZGV2ICpleHRjb25fZ2V0X2Vk ZXZfYnlfcGhhbmRsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpbmRleCkKPiAgCQlyZXR1cm4g RVJSX1BUUigtRU5PREVWKTsKPiAgCX0KPiAgCj4gLQltdXRleF9sb2NrKCZleHRjb25fZGV2X2xp c3RfbG9jayk7Cj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVkZXYsICZleHRjb25fZGV2X2xpc3Qs IGVudHJ5KSB7Cj4gLQkJaWYgKGVkZXYtPmRldi5wYXJlbnQgJiYgZWRldi0+ZGV2LnBhcmVudC0+ b2Zfbm9kZSA9PSBub2RlKSB7Cj4gLQkJCW11dGV4X3VubG9jaygmZXh0Y29uX2Rldl9saXN0X2xv Y2spOwo+IC0JCQlvZl9ub2RlX3B1dChub2RlKTsKPiAtCQkJcmV0dXJuIGVkZXY7Cj4gLQkJfQo+ IC0JfQo+IC0JbXV0ZXhfdW5sb2NrKCZleHRjb25fZGV2X2xpc3RfbG9jayk7Cj4gKwllZGV2ID0g ZXh0Y29uX2ZpbmRfZWRldl9ieV9ub2RlKG5vZGUpOwo+ICAJb2Zfbm9kZV9wdXQobm9kZSk7Cj4g IAo+IC0JcmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7Cj4gKwlyZXR1cm4gZWRldjsKPiAg fQo+ICsKPiAgI2Vsc2UKPiArCj4gK3N0cnVjdCBleHRjb25fZGV2ICpleHRjb25fZmluZF9lZGV2 X2J5X25vZGUoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQo+ICt7Cj4gKwlyZXR1cm4gRVJSX1BU UigtRU5PU1lTKTsKPiArfQo+ICsKPiAgc3RydWN0IGV4dGNvbl9kZXYgKmV4dGNvbl9nZXRfZWRl dl9ieV9waGFuZGxlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGluZGV4KQo+ICB7Cj4gIAlyZXR1 cm4gRVJSX1BUUigtRU5PU1lTKTsKPiAgfQo+ICsKPiAgI2VuZGlmIC8qIENPTkZJR19PRiAqLwo+ ICsKPiArRVhQT1JUX1NZTUJPTF9HUEwoZXh0Y29uX2ZpbmRfZWRldl9ieV9ub2RlKTsKPiAgRVhQ T1JUX1NZTUJPTF9HUEwoZXh0Y29uX2dldF9lZGV2X2J5X3BoYW5kbGUpOwo+ICAKPiAgLyoqCj4g ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0Y29uLmggYi9pbmNsdWRlL2xpbnV4L2V4dGNv bi5oCj4gaW5kZXggNmQ5NGU4MmM4YWQ5Li43ZjAzM2IxZWE1NjggMTAwNjQ0Cj4gLS0tIGEvaW5j bHVkZS9saW51eC9leHRjb24uaAo+ICsrKyBiL2luY2x1ZGUvbGludXgvZXh0Y29uLmgKPiBAQCAt MjMwLDYgKzIzMCw3IEBAIGV4dGVybiB2b2lkIGRldm1fZXh0Y29uX3VucmVnaXN0ZXJfbm90aWZp ZXJfYWxsKHN0cnVjdCBkZXZpY2UgKmRldiwKPiAgICogRm9sbG93aW5nIEFQSXMgZ2V0IHRoZSBl eHRjb25fZGV2IGZyb20gZGV2aWNldHJlZSBvciBieSB0aHJvdWdoIGV4dGNvbiBuYW1lLgo+ICAg Ki8KPiAgZXh0ZXJuIHN0cnVjdCBleHRjb25fZGV2ICpleHRjb25fZ2V0X2V4dGNvbl9kZXYoY29u c3QgY2hhciAqZXh0Y29uX25hbWUpOwo+ICtleHRlcm4gc3RydWN0IGV4dGNvbl9kZXYgKmV4dGNv bl9maW5kX2VkZXZfYnlfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOwo+ICBleHRlcm4g c3RydWN0IGV4dGNvbl9kZXYgKmV4dGNvbl9nZXRfZWRldl9ieV9waGFuZGxlKHN0cnVjdCBkZXZp Y2UgKmRldiwKPiAgCQkJCQkJICAgICBpbnQgaW5kZXgpOwo+ICAKPiBAQCAtMjgzLDYgKzI4NCwx MSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBleHRjb25fZGV2ICpleHRjb25fZ2V0X2V4dGNvbl9k ZXYoY29uc3QgY2hhciAqZXh0Y29uX25hbWUpCj4gIAlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsK PiAgfQo+ICAKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZXh0Y29uX2RldiAqZXh0Y29uX2ZpbmRf ZWRldl9ieV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKPiArewo+ICsJcmV0dXJuIEVS Ul9QVFIoLUVOT0RFVik7Cj4gK30KPiArCj4gIHN0YXRpYyBpbmxpbmUgc3RydWN0IGV4dGNvbl9k ZXYgKmV4dGNvbl9nZXRfZWRldl9ieV9waGFuZGxlKHN0cnVjdCBkZXZpY2UgKmRldiwKPiAgCQkJ CWludCBpbmRleCkKPiAgewo+Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: cw00.choi@samsung.com (Chanwoo Choi) Date: Tue, 27 Feb 2018 20:03:14 +0900 Subject: [PATCH v5 5/6] extcon: add possibility to get extcon device by OF node In-Reply-To: <20180227071134.28063-6-a.hajda@samsung.com> References: <20180227071134.28063-1-a.hajda@samsung.com> <20180227071134.28063-6-a.hajda@samsung.com> Message-ID: <5A953AF2.6030501@samsung.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi, On 2018? 02? 27? 16:11, Andrzej Hajda wrote: > Since extcon property is not allowed in DT, extcon subsystem requires > another way to get extcon device. Lets try the simplest approach - get > edev by of_node. > > Signed-off-by: Andrzej Hajda > Acked-by: Chanwoo Choi > --- > v5: function renamed to extcon_find_edev_by_node (Andy) > v2: changed label to follow local convention (Chanwoo) > --- > drivers/extcon/extcon.c | 44 ++++++++++++++++++++++++++++++++++---------- > include/linux/extcon.h | 6 ++++++ > 2 files changed, 40 insertions(+), 10 deletions(-) > > diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c > index cb38c2747684..47a5ca9eb86d 100644 > --- a/drivers/extcon/extcon.c > +++ b/drivers/extcon/extcon.c > @@ -1336,6 +1336,28 @@ void extcon_dev_unregister(struct extcon_dev *edev) > EXPORT_SYMBOL_GPL(extcon_dev_unregister); > > #ifdef CONFIG_OF > + > +/* > + * extcon_find_edev_by_node - Find the extcon device from devicetree. > + * @node : OF node identyfying edev s/identyfying/identifying > + * > + * Return the pointer of extcon device if success or ERR_PTR(err) if fail. > + */ > +struct extcon_dev *extcon_find_edev_by_node(struct device_node *node) > +{ > + struct extcon_dev *edev; > + > + mutex_lock(&extcon_dev_list_lock); > + list_for_each_entry(edev, &extcon_dev_list, entry) > + if (edev->dev.parent && edev->dev.parent->of_node == node) > + goto out; > + edev = ERR_PTR(-EPROBE_DEFER); > +out: > + mutex_unlock(&extcon_dev_list_lock); > + > + return edev; > +} > + > /* > * extcon_get_edev_by_phandle - Get the extcon device from devicetree. > * @dev : the instance to the given device > @@ -1363,25 +1385,27 @@ struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev, int index) > return ERR_PTR(-ENODEV); > } > > - mutex_lock(&extcon_dev_list_lock); > - list_for_each_entry(edev, &extcon_dev_list, entry) { > - if (edev->dev.parent && edev->dev.parent->of_node == node) { > - mutex_unlock(&extcon_dev_list_lock); > - of_node_put(node); > - return edev; > - } > - } > - mutex_unlock(&extcon_dev_list_lock); > + edev = extcon_find_edev_by_node(node); > of_node_put(node); > > - return ERR_PTR(-EPROBE_DEFER); > + return edev; > } > + > #else > + > +struct extcon_dev *extcon_find_edev_by_node(struct device_node *node) > +{ > + return ERR_PTR(-ENOSYS); > +} > + > struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev, int index) > { > return ERR_PTR(-ENOSYS); > } > + > #endif /* CONFIG_OF */ > + > +EXPORT_SYMBOL_GPL(extcon_find_edev_by_node); > EXPORT_SYMBOL_GPL(extcon_get_edev_by_phandle); > > /** > diff --git a/include/linux/extcon.h b/include/linux/extcon.h > index 6d94e82c8ad9..7f033b1ea568 100644 > --- a/include/linux/extcon.h > +++ b/include/linux/extcon.h > @@ -230,6 +230,7 @@ extern void devm_extcon_unregister_notifier_all(struct device *dev, > * Following APIs get the extcon_dev from devicetree or by through extcon name. > */ > extern struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name); > +extern struct extcon_dev *extcon_find_edev_by_node(struct device_node *node); > extern struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev, > int index); > > @@ -283,6 +284,11 @@ static inline struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name) > return ERR_PTR(-ENODEV); > } > > +static inline struct extcon_dev *extcon_find_edev_by_node(struct device_node *node) > +{ > + return ERR_PTR(-ENODEV); > +} > + > static inline struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev, > int index) > { > -- Best Regards, Chanwoo Choi Samsung Electronics