Commit b83f6877 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Merge tag 'extcon-next-for-5.7' of...

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
parents 82174738 9c945530
Loading
Loading
Loading
Loading
+0 −24
Original line number Diff line number Diff line
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>;
		};
	}
+56 −0
Original line number Diff line number Diff line
# 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>;
            };
        };
    };
+32 −0
Original line number Diff line number Diff line
@@ -443,9 +443,40 @@ static int axp288_extcon_probe(struct platform_device *pdev)
	/* Start charger cable type detection */
	axp288_extcon_enable(info);

	device_init_wakeup(dev, true);
	platform_set_drvdata(pdev, info);

	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[] = {
	{ .name = "axp288_extcon" },
	{},
@@ -457,6 +488,7 @@ static struct platform_driver axp288_extcon_driver = {
	.id_table = axp288_extcon_table,
	.driver = {
		.name = "axp288_extcon",
		.pm = &axp288_extcon_pm_ops,
	},
};

+6 −2
Original line number Diff line number Diff line
@@ -205,14 +205,18 @@ static int palmas_usb_probe(struct platform_device *pdev)

	palmas_usb->id_gpiod = devm_gpiod_get_optional(&pdev->dev, "id",
							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");
		return PTR_ERR(palmas_usb->id_gpiod);
	}

	palmas_usb->vbus_gpiod = devm_gpiod_get_optional(&pdev->dev, "vbus",
							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");
		return PTR_ERR(palmas_usb->vbus_gpiod);
	}
+1 −0
Original line number Diff line number Diff line
@@ -1406,6 +1406,7 @@ const char *extcon_get_edev_name(struct extcon_dev *edev)
{
	return !edev ? NULL : edev->name;
}
EXPORT_SYMBOL_GPL(extcon_get_edev_name);

static int __init extcon_class_init(void)
{
Loading