Merge tag 'extcon-next-for-5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/extcon into char-misc-next
Chanwoo writes: Update extcon for 5.7 Detailed description for this pull request: 1. Update the extcon provider driver as following: - Add wakeup support for extcon-axp288.c - Clean-up code of -EPROBE_DEFER error case for extcon-palmas.c - Covert extcon-usbc-cros-ec.txt to yaml format 2. Export symbol of extcon_get_edev_name() * tag 'extcon-next-for-5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/extcon: extcon: axp288: Add wakeup support extcon: Mark extcon_get_edev_name() function as exported symbol extcon: palmas: Hide error messages if gpio returns -EPROBE_DEFER dt-bindings: extcon: usbc-cros-ec: convert extcon-usbc-cros-ec.txt to yaml format
This commit is contained in:
@@ -1,24 +0,0 @@
|
|||||||
ChromeOS EC USB Type-C cable and accessories detection
|
|
||||||
|
|
||||||
On ChromeOS systems with USB Type C ports, the ChromeOS Embedded Controller is
|
|
||||||
able to detect the state of external accessories such as display adapters
|
|
||||||
or USB devices when said accessories are attached or detached.
|
|
||||||
|
|
||||||
The node for this device must be under a cros-ec node like google,cros-ec-spi
|
|
||||||
or google,cros-ec-i2c.
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- compatible: Should be "google,extcon-usbc-cros-ec".
|
|
||||||
- google,usb-port-id: Specifies the USB port ID to use.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
cros-ec@0 {
|
|
||||||
compatible = "google,cros-ec-i2c";
|
|
||||||
|
|
||||||
...
|
|
||||||
|
|
||||||
extcon {
|
|
||||||
compatible = "google,extcon-usbc-cros-ec";
|
|
||||||
google,usb-port-id = <0>;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/extcon/extcon-usbc-cros-ec.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: ChromeOS EC USB Type-C cable and accessories detection
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Benson Leung <bleung@chromium.org>
|
||||||
|
- Enric Balletbo i Serra <enric.balletbo@collabora.com>
|
||||||
|
|
||||||
|
description: |
|
||||||
|
On ChromeOS systems with USB Type C ports, the ChromeOS Embedded Controller is
|
||||||
|
able to detect the state of external accessories such as display adapters
|
||||||
|
or USB devices when said accessories are attached or detached.
|
||||||
|
The node for this device must be under a cros-ec node like google,cros-ec-spi
|
||||||
|
or google,cros-ec-i2c.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
const: google,extcon-usbc-cros-ec
|
||||||
|
|
||||||
|
google,usb-port-id:
|
||||||
|
allOf:
|
||||||
|
- $ref: /schemas/types.yaml#/definitions/uint32
|
||||||
|
description: the port id
|
||||||
|
minimum: 0
|
||||||
|
maximum: 255
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- google,usb-port-id
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
spi0 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
cros-ec@0 {
|
||||||
|
compatible = "google,cros-ec-spi";
|
||||||
|
reg = <0>;
|
||||||
|
|
||||||
|
usbc_extcon0: extcon0 {
|
||||||
|
compatible = "google,extcon-usbc-cros-ec";
|
||||||
|
google,usb-port-id = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
usbc_extcon1: extcon1 {
|
||||||
|
compatible = "google,extcon-usbc-cros-ec";
|
||||||
|
google,usb-port-id = <1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -443,9 +443,40 @@ static int axp288_extcon_probe(struct platform_device *pdev)
|
|||||||
/* Start charger cable type detection */
|
/* Start charger cable type detection */
|
||||||
axp288_extcon_enable(info);
|
axp288_extcon_enable(info);
|
||||||
|
|
||||||
|
device_init_wakeup(dev, true);
|
||||||
|
platform_set_drvdata(pdev, info);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int __maybe_unused axp288_extcon_suspend(struct device *dev)
|
||||||
|
{
|
||||||
|
struct axp288_extcon_info *info = dev_get_drvdata(dev);
|
||||||
|
|
||||||
|
if (device_may_wakeup(dev))
|
||||||
|
enable_irq_wake(info->irq[VBUS_RISING_IRQ]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __maybe_unused axp288_extcon_resume(struct device *dev)
|
||||||
|
{
|
||||||
|
struct axp288_extcon_info *info = dev_get_drvdata(dev);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wakeup when a charger is connected to do charger-type
|
||||||
|
* connection and generate an extcon event which makes the
|
||||||
|
* axp288 charger driver set the input current limit.
|
||||||
|
*/
|
||||||
|
if (device_may_wakeup(dev))
|
||||||
|
disable_irq_wake(info->irq[VBUS_RISING_IRQ]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static SIMPLE_DEV_PM_OPS(axp288_extcon_pm_ops, axp288_extcon_suspend,
|
||||||
|
axp288_extcon_resume);
|
||||||
|
|
||||||
static const struct platform_device_id axp288_extcon_table[] = {
|
static const struct platform_device_id axp288_extcon_table[] = {
|
||||||
{ .name = "axp288_extcon" },
|
{ .name = "axp288_extcon" },
|
||||||
{},
|
{},
|
||||||
@@ -457,6 +488,7 @@ static struct platform_driver axp288_extcon_driver = {
|
|||||||
.id_table = axp288_extcon_table,
|
.id_table = axp288_extcon_table,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "axp288_extcon",
|
.name = "axp288_extcon",
|
||||||
|
.pm = &axp288_extcon_pm_ops,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -205,14 +205,18 @@ static int palmas_usb_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
palmas_usb->id_gpiod = devm_gpiod_get_optional(&pdev->dev, "id",
|
palmas_usb->id_gpiod = devm_gpiod_get_optional(&pdev->dev, "id",
|
||||||
GPIOD_IN);
|
GPIOD_IN);
|
||||||
if (IS_ERR(palmas_usb->id_gpiod)) {
|
if (PTR_ERR(palmas_usb->id_gpiod) == -EPROBE_DEFER) {
|
||||||
|
return -EPROBE_DEFER;
|
||||||
|
} else if (IS_ERR(palmas_usb->id_gpiod)) {
|
||||||
dev_err(&pdev->dev, "failed to get id gpio\n");
|
dev_err(&pdev->dev, "failed to get id gpio\n");
|
||||||
return PTR_ERR(palmas_usb->id_gpiod);
|
return PTR_ERR(palmas_usb->id_gpiod);
|
||||||
}
|
}
|
||||||
|
|
||||||
palmas_usb->vbus_gpiod = devm_gpiod_get_optional(&pdev->dev, "vbus",
|
palmas_usb->vbus_gpiod = devm_gpiod_get_optional(&pdev->dev, "vbus",
|
||||||
GPIOD_IN);
|
GPIOD_IN);
|
||||||
if (IS_ERR(palmas_usb->vbus_gpiod)) {
|
if (PTR_ERR(palmas_usb->vbus_gpiod) == -EPROBE_DEFER) {
|
||||||
|
return -EPROBE_DEFER;
|
||||||
|
} else if (IS_ERR(palmas_usb->vbus_gpiod)) {
|
||||||
dev_err(&pdev->dev, "failed to get vbus gpio\n");
|
dev_err(&pdev->dev, "failed to get vbus gpio\n");
|
||||||
return PTR_ERR(palmas_usb->vbus_gpiod);
|
return PTR_ERR(palmas_usb->vbus_gpiod);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1406,6 +1406,7 @@ const char *extcon_get_edev_name(struct extcon_dev *edev)
|
|||||||
{
|
{
|
||||||
return !edev ? NULL : edev->name;
|
return !edev ? NULL : edev->name;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(extcon_get_edev_name);
|
||||||
|
|
||||||
static int __init extcon_class_init(void)
|
static int __init extcon_class_init(void)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -286,6 +286,11 @@ static inline struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev,
|
|||||||
{
|
{
|
||||||
return ERR_PTR(-ENODEV);
|
return ERR_PTR(-ENODEV);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline const char *extcon_get_edev_name(struct extcon_dev *edev)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
#endif /* CONFIG_EXTCON */
|
#endif /* CONFIG_EXTCON */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user