* [PATCH V2 0/2] usb: typec: sprd: Add Unisoc PMIC typec driver @ 2023-12-11 7:41 Xinhu Wu 2023-12-11 7:41 ` [PATCH V2 1/2] usb: typec: Support sprd_pmic_typec driver Xinhu Wu 2023-12-11 7:41 ` [PATCH V2 2/2] dt-bindings: usb: Add an Spreadtrum pmic typec yaml Xinhu Wu 0 siblings, 2 replies; 9+ messages in thread From: Xinhu Wu @ 2023-12-11 7:41 UTC (permalink / raw) To: gregkh, robh+dt, krzysztof.kozlowski+dt, conor+dt, orsonzhai, baolin.wang, zhang.lyra, heikki.krogerus, linux-usb, devicetree, linux-kernel Cc: xinhuwu.unisoc, zhiyong.liu, peak.yang, teng.zhang1, bruce.chen, surong.pang, xingxing.luo, xinhu.wu Support typec driver on unisoc related pmic, using extcon mechanism framework to notify client driver change in V2 -Modify the commit message Xinhu Wu (2): usb: typec: Support sprd_pmic_typec driver dt-bindings: usb: Add an Spreadtrum pmic typec yaml .../bindings/usb/sprd,pmic_typec.yaml | 65 ++ drivers/usb/typec/Kconfig | 11 + drivers/usb/typec/Makefile | 1 + drivers/usb/typec/sprd_pmic_typec.c | 587 ++++++++++++++++++ 4 files changed, 664 insertions(+) create mode 100644 Documentation/devicetree/bindings/usb/sprd,pmic_typec.yaml create mode 100644 drivers/usb/typec/sprd_pmic_typec.c -- 2.17.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH V2 1/2] usb: typec: Support sprd_pmic_typec driver 2023-12-11 7:41 [PATCH V2 0/2] usb: typec: sprd: Add Unisoc PMIC typec driver Xinhu Wu @ 2023-12-11 7:41 ` Xinhu Wu 2023-12-11 7:53 ` Greg KH ` (3 more replies) 2023-12-11 7:41 ` [PATCH V2 2/2] dt-bindings: usb: Add an Spreadtrum pmic typec yaml Xinhu Wu 1 sibling, 4 replies; 9+ messages in thread From: Xinhu Wu @ 2023-12-11 7:41 UTC (permalink / raw) To: gregkh, robh+dt, krzysztof.kozlowski+dt, conor+dt, orsonzhai, baolin.wang, zhang.lyra, heikki.krogerus, linux-usb, devicetree, linux-kernel Cc: xinhuwu.unisoc, zhiyong.liu, peak.yang, teng.zhang1, bruce.chen, surong.pang, xingxing.luo, xinhu.wu Add Unisoc PMIC typec driver.The Unisoc PMIC typec driver handles the role and orientation detection, and notifies client drivers using extcon mechanism. Signed-off-by: Xinhu Wu <xinhu.wu@unisoc.com> --- drivers/usb/typec/Kconfig | 11 + drivers/usb/typec/Makefile | 1 + drivers/usb/typec/sprd_pmic_typec.c | 587 ++++++++++++++++++++++++++++ 3 files changed, 599 insertions(+) create mode 100644 drivers/usb/typec/sprd_pmic_typec.c diff --git a/drivers/usb/typec/Kconfig b/drivers/usb/typec/Kconfig index 2f80c2792dbd..47b4468315aa 100644 --- a/drivers/usb/typec/Kconfig +++ b/drivers/usb/typec/Kconfig @@ -110,6 +110,17 @@ config TYPEC_WUSB3801 If you choose to build this driver as a dynamically linked module, the module will be called wusb3801.ko. +config TYPEC_SPRD_PMIC + tristate "SPRD Serials PMICs Typec Controller" + help + Say Y or M here if your system has a SPRD PMIC Type-C port controller. + + If you choose to build this driver as a dynamically linked module, the + module will be called sprd_pmic_typec.ko. + SPRD_PMIC_TYPEC notify usb, phy, charger, and analog audio to proceed + with work + + source "drivers/usb/typec/mux/Kconfig" source "drivers/usb/typec/altmodes/Kconfig" diff --git a/drivers/usb/typec/Makefile b/drivers/usb/typec/Makefile index 7a368fea61bc..81818c2fa890 100644 --- a/drivers/usb/typec/Makefile +++ b/drivers/usb/typec/Makefile @@ -11,4 +11,5 @@ obj-$(CONFIG_TYPEC_HD3SS3220) += hd3ss3220.o obj-$(CONFIG_TYPEC_STUSB160X) += stusb160x.o obj-$(CONFIG_TYPEC_RT1719) += rt1719.o obj-$(CONFIG_TYPEC_WUSB3801) += wusb3801.o +obj-$(CONFIG_TYPEC_SPRD_PMIC) += sprd_pmic_typec.o obj-$(CONFIG_TYPEC) += mux/ diff --git a/drivers/usb/typec/sprd_pmic_typec.c b/drivers/usb/typec/sprd_pmic_typec.c new file mode 100644 index 000000000000..536f340d8b65 --- /dev/null +++ b/drivers/usb/typec/sprd_pmic_typec.c @@ -0,0 +1,587 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Driver for Spreadtrum PMIC USB Type-C + * + * Copyright (C) 2023 Unisoc Inc. + */ +#include <linux/extcon.h> +#include <linux/extcon-provider.h> +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/nvmem-consumer.h> +#include <linux/of.h> +#include <linux/of_device.h> +#include <linux/platform_device.h> +#include <linux/random.h> +#include <linux/regmap.h> +#include <linux/slab.h> +#include <linux/usb/tcpm.h> +#include <linux/usb/typec.h> + +/* registers definitions for controller REGS_TYPEC */ +#define SC27XX_EN 0x00 +#define SC27XX_MODE 0x04 +#define SC27XX_INT_EN 0x0c +#define SC27XX_INT_CLR 0x10 +#define SC27XX_INT_MASK 0x18 +#define SC27XX_STATUS 0x1c +#define SC27XX_TCCDE_CNT 0x20 +#define SC27XX_RTRIM 0x3c + +/* SC27XX_TYPEC_EN */ +#define SC27XX_TYPEC_USB20_ONLY BIT(4) + +/* SC27XX_TYPEC MODE */ +#define SC27XX_MODE_SNK 0 +#define SC27XX_MODE_SRC 1 +#define SC27XX_MODE_DRP 2 +#define SC27XX_MODE_MASK 3 + +/* SC27XX_INT_EN */ +#define SC27XX_ATTACH_INT_EN BIT(0) +#define SC27XX_DETACH_INT_EN BIT(1) + +/* SC27XX_INT_MASK */ +#define SC27XX_ATTACH_INT BIT(0) +#define SC27XX_DETACH_INT BIT(1) + +#define SC27XX_STATE_MASK GENMASK(4, 0) +#define SC27XX_EVENT_MASK GENMASK(9, 0) + +#define SC2730_EFUSE_CC1_SHIFT 5 +#define SC2730_EFUSE_CC2_SHIFT 0 + +#define SC27XX_CC1_MASK(n) GENMASK((n) + 4, (n)) +#define SC27XX_CC2_MASK(n) GENMASK((n) + 4, (n)) +#define SC27XX_CC_SHIFT(n) (n) + +/* modify sc2730 tcc debunce */ +#define SC27XX_TCC_DEBOUNCE_CNT 0xc7f + +/* pmic name number*/ +#define SC2730 0x01 + +/* CC DETECT */ +#define SC2730_CC1_CHECK BIT(5) + +enum sprd_pmic_typec_connection_state { + TYPEC_DETACHED_SNK, + TYPEC_ATTACHWAIT_SNK, + TYPEC_ATTACHED_SNK, + TYPEC_DETACHED_SRC, + TYPEC_ATTACHWAIT_SRC, + TYPEC_ATTACHED_SRC, + TYPEC_POWERED_CABLE, + TYPEC_AUDIO_CABLE, + TYPEC_DEBUG_CABLE, + TYPEC_TOGGLE_SLEEP, + TYPEC_ERR_RECOV, + TYPEC_DISABLED, + TYPEC_TRY_SNK, + TYPEC_TRY_WAIT_SRC, + TYPEC_TRY_SRC, + TYPEC_TRY_WAIT_SNK, + TYPEC_UNSUPOORT_ACC, + TYPEC_ORIENTED_DEBUG, +}; + +struct sprd_pmic_typec_variant_data { + u8 pmic_number; + u32 efuse_cc1_shift; + u32 efuse_cc2_shift; + u32 int_en; + u32 int_clr; + u32 mode; + u32 attach_en; + u32 detach_en; + u32 state_mask; + u32 event_mask; +}; + +static const struct sprd_pmic_typec_variant_data sc2730_data = { + .pmic_number = SC2730, + .efuse_cc1_shift = SC2730_EFUSE_CC1_SHIFT, + .efuse_cc2_shift = SC2730_EFUSE_CC2_SHIFT, + .int_en = SC27XX_INT_EN, + .int_clr = SC27XX_INT_CLR, + .mode = SC27XX_MODE, + .attach_en = SC27XX_ATTACH_INT_EN, + .detach_en = SC27XX_DETACH_INT_EN, + .state_mask = SC27XX_STATE_MASK, + .event_mask = SC27XX_EVENT_MASK, +}; + +struct sprd_pmic_typec { + struct device *dev; + struct regmap *regmap; + u32 base; + int irq; + int mode; + struct extcon_dev *edev; + bool usb20_only; + bool partner_connected; + + u8 pd_swap_evt; + spinlock_t lock; + enum sprd_pmic_typec_connection_state state; + enum sprd_pmic_typec_connection_state pre_state; + enum typec_cc_polarity cc_polarity; + struct typec_port *port; + struct typec_partner *partner; + struct typec_capability typec_cap; + const struct sprd_pmic_typec_variant_data *var_data; +}; + +static const char * const sprd_pmic_typec_cc_polarity_roles[] = { + [TYPEC_POLARITY_CC1] = "cc_1", + [TYPEC_POLARITY_CC2] = "cc_2", +}; + +static void typec_set_cc_polarity_role(struct sprd_pmic_typec *sc, + enum typec_cc_polarity polarity) +{ + if (sc->cc_polarity == polarity) + return; + + sc->cc_polarity = polarity; + sysfs_notify(&sc->dev->kobj, NULL, "typec_cc_polarity_role"); + kobject_uevent(&sc->dev->kobj, KOBJ_CHANGE); +} + +static int sprd_pmic_typec_set_cc_polarity_role(struct sprd_pmic_typec *sc) +{ + enum typec_cc_polarity cc_polarity; + u32 val; + int ret; + + ret = regmap_read(sc->regmap, sc->base + SC27XX_STATUS, &val); + if (ret < 0) { + dev_err(sc->dev, "failed to read STATUS register.\n"); + return ret; + } + + if (val & SC2730_CC1_CHECK) + cc_polarity = TYPEC_POLARITY_CC1; + else + cc_polarity = TYPEC_POLARITY_CC2; + + typec_set_cc_polarity_role(sc, cc_polarity); + + return ret; +} + +static int sprd_pmic_typec_connect(struct sprd_pmic_typec *sc, u32 status) +{ + enum typec_data_role data_role = TYPEC_DEVICE; + enum typec_role power_role = TYPEC_SINK; + enum typec_role vconn_role = TYPEC_SINK; + struct typec_partner_desc desc; + + if (sc->partner) + return 0; + + switch (sc->state) { + case TYPEC_ATTACHED_SNK: + power_role = TYPEC_SINK; + data_role = TYPEC_DEVICE; + vconn_role = TYPEC_SINK; + break; + case TYPEC_ATTACHED_SRC: + power_role = TYPEC_SOURCE; + data_role = TYPEC_HOST; + vconn_role = TYPEC_SOURCE; + break; + } + + desc.usb_pd = 0; + desc.identity = NULL; + if (sc->state == TYPEC_AUDIO_CABLE) + desc.accessory = TYPEC_ACCESSORY_AUDIO; + else if (sc->state == TYPEC_DEBUG_CABLE) + desc.accessory = TYPEC_ACCESSORY_DEBUG; + else + desc.accessory = TYPEC_ACCESSORY_NONE; + + sc->partner = typec_register_partner(sc->port, &desc); + if (!sc->partner) + return -ENODEV; + + typec_set_pwr_opmode(sc->port, TYPEC_PWR_MODE_USB); + typec_set_pwr_role(sc->port, power_role); + typec_set_data_role(sc->port, data_role); + typec_set_vconn_role(sc->port, vconn_role); + + switch (sc->state) { + case TYPEC_ATTACHED_SNK: + sc->pre_state = TYPEC_ATTACHED_SNK; + /*notify USB, USB PHY, charger, and bc1p2 driver*/ + extcon_set_state_sync(sc->edev, EXTCON_USB, true); + break; + case TYPEC_ATTACHED_SRC: + sc->pre_state = TYPEC_ATTACHED_SRC; + /*notify USB, USB PHY driver*/ + extcon_set_state_sync(sc->edev, EXTCON_USB_HOST, true); + break; + case TYPEC_AUDIO_CABLE: + /*notify analog audio driver*/ + sc->pre_state = TYPEC_AUDIO_CABLE; + extcon_set_state_sync(sc->edev, EXTCON_JACK_HEADPHONE, true); + break; + default: + break; + } + + spin_lock(&sc->lock); + sc->partner_connected = true; + spin_unlock(&sc->lock); + sprd_pmic_typec_set_cc_polarity_role(sc); + + return 0; +} + +static void sprd_pmic_typec_disconnect(struct sprd_pmic_typec *sc, u32 status) +{ + typec_unregister_partner(sc->partner); + sc->partner = NULL; + typec_set_pwr_opmode(sc->port, TYPEC_PWR_MODE_USB); + typec_set_pwr_role(sc->port, TYPEC_SINK); + typec_set_data_role(sc->port, TYPEC_DEVICE); + typec_set_vconn_role(sc->port, TYPEC_SINK); + + spin_lock(&sc->lock); + sc->partner_connected = false; + spin_unlock(&sc->lock); + + switch (sc->pre_state) { + case TYPEC_ATTACHED_SNK: + extcon_set_state_sync(sc->edev, EXTCON_USB, false); + break; + case TYPEC_ATTACHED_SRC: + extcon_set_state_sync(sc->edev, EXTCON_USB_HOST, false); + break; + case TYPEC_AUDIO_CABLE: + extcon_set_state_sync(sc->edev, EXTCON_JACK_HEADPHONE, false); + break; + default: + break; + } + sc->pre_state = TYPEC_DETACHED_SNK; +} + +static irqreturn_t sprd_pmic_typec_interrupt(int irq, void *data) +{ + struct sprd_pmic_typec *sc = data; + u32 event; + int ret; + + dev_info(sc->dev, "%s enter line %d\n", __func__, __LINE__); + ret = regmap_read(sc->regmap, sc->base + SC27XX_INT_MASK, &event); + if (ret) + return ret; + + event &= sc->var_data->event_mask; + + ret = regmap_read(sc->regmap, sc->base + SC27XX_STATUS, &sc->state); + if (ret) + goto clear_ints; + + sc->state &= sc->var_data->state_mask; + + if (event & SC27XX_ATTACH_INT) { + ret = sprd_pmic_typec_connect(sc, sc->state); + if (ret) + dev_warn(sc->dev, "failed to register partner\n"); + } else if (event & SC27XX_DETACH_INT) { + sprd_pmic_typec_disconnect(sc, sc->state); + } + +clear_ints: + regmap_write(sc->regmap, sc->base + sc->var_data->int_clr, event); + + dev_info(sc->dev, "now works as DRP and is in %d state, event %d\n", + sc->state, event); + return IRQ_HANDLED; +} + +static int sprd_pmic_typec_enable(struct sprd_pmic_typec *sc) +{ + int ret; + u32 val; + + /* Set typec mode */ + ret = regmap_read(sc->regmap, sc->base + sc->var_data->mode, &val); + if (ret) + return ret; + + val &= ~SC27XX_MODE_MASK; + switch (sc->mode) { + case TYPEC_PORT_DFP: + val |= SC27XX_MODE_SRC; + break; + case TYPEC_PORT_UFP: + val |= SC27XX_MODE_SNK; + break; + case TYPEC_PORT_DRP: + val |= SC27XX_MODE_DRP; + break; + default: + return -EINVAL; + } + + ret = regmap_write(sc->regmap, sc->base + sc->var_data->mode, val); + if (ret) + return ret; + + /* typec USB20 only flag, only work in snk mode */ + if (sc->typec_cap.data == TYPEC_PORT_UFP && sc->usb20_only) { + ret = regmap_update_bits(sc->regmap, sc->base + SC27XX_EN, + SC27XX_TYPEC_USB20_ONLY, + SC27XX_TYPEC_USB20_ONLY); + if (ret) + return ret; + } + + ret = regmap_write(sc->regmap, sc->base + SC27XX_TCCDE_CNT, + SC27XX_TCC_DEBOUNCE_CNT); + if (ret) + return ret; + + /* Enable typec interrupt and enable typec */ + ret = regmap_read(sc->regmap, sc->base + sc->var_data->int_en, &val); + if (ret) + return ret; + + val |= sc->var_data->attach_en | sc->var_data->detach_en; + return regmap_write(sc->regmap, sc->base + sc->var_data->int_en, val); +} + +/* Use extcon mechanism for port management, notify USB, USB PHY, charger, + * bc1p2, and analog audio drivers + */ +static const u32 sprd_pmic_typec_cable[] = { + EXTCON_USB, + EXTCON_USB_HOST, + EXTCON_JACK_HEADPHONE, + EXTCON_NONE, +}; + +static int sprd_pmic_typec_get_cc1_efuse(struct sprd_pmic_typec *sc) +{ + struct nvmem_cell *cell; + u32 calib_data = 0; + void *buf; + size_t len; + + cell = nvmem_cell_get(sc->dev, "typec_cc1_cal"); + if (IS_ERR(cell)) + return PTR_ERR(cell); + + buf = nvmem_cell_read(cell, &len); + nvmem_cell_put(cell); + + if (IS_ERR(buf)) + return PTR_ERR(buf); + + memcpy(&calib_data, buf, min(len, sizeof(u32))); + calib_data = (calib_data & SC27XX_CC1_MASK(sc->var_data->efuse_cc1_shift)) + >> SC27XX_CC_SHIFT(sc->var_data->efuse_cc1_shift); + kfree(buf); + + return calib_data; +} + +static int sprd_pmic_typec_get_cc2_efuse(struct sprd_pmic_typec *sc) +{ + struct nvmem_cell *cell; + u32 calib_data = 0; + void *buf; + size_t len = 0; + + cell = nvmem_cell_get(sc->dev, "typec_cc2_cal"); + if (IS_ERR(cell)) + return PTR_ERR(cell); + + buf = nvmem_cell_read(cell, &len); + nvmem_cell_put(cell); + + if (IS_ERR(buf)) + return PTR_ERR(buf); + + memcpy(&calib_data, buf, min(len, sizeof(u32))); + calib_data = (calib_data & SC27XX_CC2_MASK(sc->var_data->efuse_cc2_shift)) + >> SC27XX_CC_SHIFT(sc->var_data->efuse_cc2_shift); + kfree(buf); + + return calib_data; +} + +static int sprd_pmic_typec_set_rtrim(struct sprd_pmic_typec *sc) +{ + int calib_cc1; + int calib_cc2; + u32 rtrim; + + calib_cc1 = sprd_pmic_typec_get_cc1_efuse(sc); + if (calib_cc1 < 0) + return calib_cc1; + calib_cc2 = sprd_pmic_typec_get_cc2_efuse(sc); + if (calib_cc2 < 0) + return calib_cc2; + + rtrim = calib_cc1 | calib_cc2<<5; + + return regmap_write(sc->regmap, sc->base + SC27XX_RTRIM, rtrim); +} + +static ssize_t +sprd_pmic_typec_cc_polarity_role_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct sprd_pmic_typec *sc = dev_get_drvdata(dev); + + return snprintf(buf, 5, "%s\n", sprd_pmic_typec_cc_polarity_roles[sc->cc_polarity]); +} +static DEVICE_ATTR_RO(sprd_pmic_typec_cc_polarity_role); + +static struct attribute *sprd_pmic_typec_attrs[] = { + &dev_attr_sprd_pmic_typec_cc_polarity_role.attr, + NULL, +}; +ATTRIBUTE_GROUPS(sprd_pmic_typec); + +static int sprd_pmic_typec_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct device_node *node = pdev->dev.of_node; + struct sprd_pmic_typec *sc; + const struct sprd_pmic_typec_variant_data *pdata; + int mode, ret; + + pdata = of_device_get_match_data(dev); + if (!pdata) { + dev_err(&pdev->dev, "No matching driver data found\n"); + return -EINVAL; + } + + sc = devm_kzalloc(&pdev->dev, sizeof(*sc), GFP_KERNEL); + if (!sc) + return -ENOMEM; + + sc->edev = devm_extcon_dev_allocate(&pdev->dev, sprd_pmic_typec_cable); + if (IS_ERR(sc->edev)) { + dev_err(&pdev->dev, "failed to allocate extcon device\n"); + return PTR_ERR(sc->edev); + } + + ret = devm_extcon_dev_register(&pdev->dev, sc->edev); + if (ret < 0) { + dev_err(&pdev->dev, "can't register extcon device: %d\n", ret); + return ret; + } + + sc->dev = &pdev->dev; + sc->irq = platform_get_irq(pdev, 0); + if (sc->irq < 0) { + dev_err(sc->dev, "failed to get typec interrupt.\n"); + return sc->irq; + } + + sc->regmap = dev_get_regmap(pdev->dev.parent, NULL); + if (!sc->regmap) { + dev_err(sc->dev, "failed to get regmap.\n"); + return -ENODEV; + } + + ret = of_property_read_u32(node, "reg", &sc->base); + if (ret) { + dev_err(dev, "failed to get reg offset!\n"); + return ret; + } + + ret = of_property_read_u32(node, "sprd,mode", &mode); + if (ret) { + dev_err(dev, "failed to get typec port mode type\n"); + return ret; + } + + if (mode < TYPEC_PORT_DFP || mode > TYPEC_PORT_DRP + || mode == TYPEC_PORT_UFP) { + mode = TYPEC_PORT_UFP; + sc->usb20_only = true; + dev_info(dev, "usb 2.0 only is enabled\n"); + } + + sc->var_data = pdata; + sc->mode = mode; + sc->typec_cap.type = mode; + sc->typec_cap.data = TYPEC_PORT_DRD; + sc->typec_cap.revision = USB_TYPEC_REV_1_2; + sc->typec_cap.prefer_role = TYPEC_NO_PREFERRED_ROLE; + sc->port = typec_register_port(&pdev->dev, &sc->typec_cap); + if (!sc->port) { + dev_err(sc->dev, "failed to register port!\n"); + return -ENODEV; + } + spin_lock_init(&sc->lock); + + ret = sysfs_create_groups(&sc->dev->kobj, sprd_pmic_typec_groups); + if (ret < 0) + dev_err(sc->dev, "failed to create cc_polarity %d\n", ret); + + ret = sprd_pmic_typec_set_rtrim(sc); + if (ret < 0) { + dev_err(sc->dev, "failed to set typec rtrim %d\n", ret); + goto error; + } + + ret = devm_request_threaded_irq(sc->dev, sc->irq, NULL, + sprd_pmic_typec_interrupt, + IRQF_EARLY_RESUME | IRQF_ONESHOT, + dev_name(sc->dev), sc); + if (ret) { + dev_err(sc->dev, "failed to request irq %d\n", ret); + goto error; + } + + ret = sprd_pmic_typec_enable(sc); + if (ret) + goto error; + + platform_set_drvdata(pdev, sc); + return 0; + +error: + typec_unregister_port(sc->port); + return ret; +} + +static int sprd_pmic_typec_remove(struct platform_device *pdev) +{ + struct sprd_pmic_typec *sc = platform_get_drvdata(pdev); + + sysfs_remove_groups(&sc->dev->kobj, sprd_pmic_typec_groups); + sprd_pmic_typec_disconnect(sc, 0); + typec_unregister_port(sc->port); + + return 0; +} + +static const struct of_device_id sprd_pmic_typec_match[] = { + {.compatible = "sprd,sc2730-typec", .data = &sc2730_data}, + {}, +}; +MODULE_DEVICE_TABLE(of, sprd_pmic_typec_match); + +static struct platform_driver sprd_pmic_typec_driver = { + .probe = sprd_pmic_typec_probe, + .remove = sprd_pmic_typec_remove, + .driver = { + .name = "sprd-typec", + .of_match_table = sprd_pmic_typec_match, + }, +}; +module_platform_driver(sprd_pmic_typec_driver); +MODULE_DESCRIPTION("unisoc sprd_pmic_typec driver"); +MODULE_AUTHOR("XinHu Wu <xinhu.wu@unisoc.com>"); +MODULE_LICENSE("GPL"); -- 2.17.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH V2 1/2] usb: typec: Support sprd_pmic_typec driver 2023-12-11 7:41 ` [PATCH V2 1/2] usb: typec: Support sprd_pmic_typec driver Xinhu Wu @ 2023-12-11 7:53 ` Greg KH 2023-12-11 17:35 ` Rob Herring ` (2 subsequent siblings) 3 siblings, 0 replies; 9+ messages in thread From: Greg KH @ 2023-12-11 7:53 UTC (permalink / raw) To: Xinhu Wu Cc: robh+dt, krzysztof.kozlowski+dt, conor+dt, orsonzhai, baolin.wang, zhang.lyra, heikki.krogerus, linux-usb, devicetree, linux-kernel, xinhuwu.unisoc, zhiyong.liu, peak.yang, teng.zhang1, bruce.chen, surong.pang, xingxing.luo On Mon, Dec 11, 2023 at 03:41:19PM +0800, Xinhu Wu wrote: > +config TYPEC_SPRD_PMIC > + tristate "SPRD Serials PMICs Typec Controller" > + help > + Say Y or M here if your system has a SPRD PMIC Type-C port controller. > + > + If you choose to build this driver as a dynamically linked module, the > + module will be called sprd_pmic_typec.ko. > + SPRD_PMIC_TYPEC notify usb, phy, charger, and analog audio to proceed > + with work I do not understand these last two lines, are you sure they are correct? > + > + Nit, only one blank line is needed here. > +static irqreturn_t sprd_pmic_typec_interrupt(int irq, void *data) > +{ > + struct sprd_pmic_typec *sc = data; > + u32 event; > + int ret; > + > + dev_info(sc->dev, "%s enter line %d\n", __func__, __LINE__); debugging information? Please remove. > + ret = regmap_read(sc->regmap, sc->base + SC27XX_INT_MASK, &event); > + if (ret) > + return ret; > + > + event &= sc->var_data->event_mask; > + > + ret = regmap_read(sc->regmap, sc->base + SC27XX_STATUS, &sc->state); > + if (ret) > + goto clear_ints; > + > + sc->state &= sc->var_data->state_mask; > + > + if (event & SC27XX_ATTACH_INT) { > + ret = sprd_pmic_typec_connect(sc, sc->state); > + if (ret) > + dev_warn(sc->dev, "failed to register partner\n"); > + } else if (event & SC27XX_DETACH_INT) { > + sprd_pmic_typec_disconnect(sc, sc->state); > + } > + > +clear_ints: > + regmap_write(sc->regmap, sc->base + sc->var_data->int_clr, event); > + > + dev_info(sc->dev, "now works as DRP and is in %d state, event %d\n", > + sc->state, event); When drivers work properly, they are quiet, please never spam the kernel log for normal operations. > +static ssize_t > +sprd_pmic_typec_cc_polarity_role_show(struct device *dev, struct device_attribute *attr, > + char *buf) > +{ > + struct sprd_pmic_typec *sc = dev_get_drvdata(dev); > + > + return snprintf(buf, 5, "%s\n", sprd_pmic_typec_cc_polarity_roles[sc->cc_polarity]); sysfs_emit() please. > +} > +static DEVICE_ATTR_RO(sprd_pmic_typec_cc_polarity_role); Where is this new sysfs file documented? > + ret = sysfs_create_groups(&sc->dev->kobj, sprd_pmic_typec_groups); You just raced with userspace and lost, and better yet: > + if (ret < 0) > + dev_err(sc->dev, "failed to create cc_polarity %d\n", ret); You do not even clean up properly here. Please use the default groups for the driver and it should work just fine. > + ret = sprd_pmic_typec_set_rtrim(sc); > + if (ret < 0) { > + dev_err(sc->dev, "failed to set typec rtrim %d\n", ret); > + goto error; > + } > + > + ret = devm_request_threaded_irq(sc->dev, sc->irq, NULL, > + sprd_pmic_typec_interrupt, > + IRQF_EARLY_RESUME | IRQF_ONESHOT, > + dev_name(sc->dev), sc); Are you sure you can use devm_() here? > +static int sprd_pmic_typec_remove(struct platform_device *pdev) > +{ > + struct sprd_pmic_typec *sc = platform_get_drvdata(pdev); > + > + sysfs_remove_groups(&sc->dev->kobj, sprd_pmic_typec_groups); Again, should not be needed if you use the default groups of the platform driver. thanks, greg k-h ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2 1/2] usb: typec: Support sprd_pmic_typec driver 2023-12-11 7:41 ` [PATCH V2 1/2] usb: typec: Support sprd_pmic_typec driver Xinhu Wu 2023-12-11 7:53 ` Greg KH @ 2023-12-11 17:35 ` Rob Herring 2023-12-11 18:51 ` kernel test robot 2023-12-11 19:11 ` kernel test robot 3 siblings, 0 replies; 9+ messages in thread From: Rob Herring @ 2023-12-11 17:35 UTC (permalink / raw) To: Xinhu Wu Cc: gregkh, krzysztof.kozlowski+dt, conor+dt, orsonzhai, baolin.wang, zhang.lyra, heikki.krogerus, linux-usb, devicetree, linux-kernel, xinhuwu.unisoc, zhiyong.liu, peak.yang, teng.zhang1, bruce.chen, surong.pang, xingxing.luo On Mon, Dec 11, 2023 at 1:42 AM Xinhu Wu <xinhu.wu@unisoc.com> wrote: > > Add Unisoc PMIC typec driver.The Unisoc PMIC typec driver handles the > role and orientation detection, and notifies client drivers using > extcon mechanism. > > Signed-off-by: Xinhu Wu <xinhu.wu@unisoc.com> > --- > drivers/usb/typec/Kconfig | 11 + > drivers/usb/typec/Makefile | 1 + > drivers/usb/typec/sprd_pmic_typec.c | 587 ++++++++++++++++++++++++++++ > 3 files changed, 599 insertions(+) > create mode 100644 drivers/usb/typec/sprd_pmic_typec.c > > diff --git a/drivers/usb/typec/Kconfig b/drivers/usb/typec/Kconfig > index 2f80c2792dbd..47b4468315aa 100644 > --- a/drivers/usb/typec/Kconfig > +++ b/drivers/usb/typec/Kconfig > @@ -110,6 +110,17 @@ config TYPEC_WUSB3801 > If you choose to build this driver as a dynamically linked module, the > module will be called wusb3801.ko. > > +config TYPEC_SPRD_PMIC > + tristate "SPRD Serials PMICs Typec Controller" > + help > + Say Y or M here if your system has a SPRD PMIC Type-C port controller. > + > + If you choose to build this driver as a dynamically linked module, the > + module will be called sprd_pmic_typec.ko. > + SPRD_PMIC_TYPEC notify usb, phy, charger, and analog audio to proceed > + with work > + > + > source "drivers/usb/typec/mux/Kconfig" > > source "drivers/usb/typec/altmodes/Kconfig" > diff --git a/drivers/usb/typec/Makefile b/drivers/usb/typec/Makefile > index 7a368fea61bc..81818c2fa890 100644 > --- a/drivers/usb/typec/Makefile > +++ b/drivers/usb/typec/Makefile > @@ -11,4 +11,5 @@ obj-$(CONFIG_TYPEC_HD3SS3220) += hd3ss3220.o > obj-$(CONFIG_TYPEC_STUSB160X) += stusb160x.o > obj-$(CONFIG_TYPEC_RT1719) += rt1719.o > obj-$(CONFIG_TYPEC_WUSB3801) += wusb3801.o > +obj-$(CONFIG_TYPEC_SPRD_PMIC) += sprd_pmic_typec.o > obj-$(CONFIG_TYPEC) += mux/ > diff --git a/drivers/usb/typec/sprd_pmic_typec.c b/drivers/usb/typec/sprd_pmic_typec.c > new file mode 100644 > index 000000000000..536f340d8b65 > --- /dev/null > +++ b/drivers/usb/typec/sprd_pmic_typec.c > @@ -0,0 +1,587 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Driver for Spreadtrum PMIC USB Type-C > + * > + * Copyright (C) 2023 Unisoc Inc. > + */ > +#include <linux/extcon.h> > +#include <linux/extcon-provider.h> > +#include <linux/interrupt.h> > +#include <linux/kernel.h> > +#include <linux/module.h> > +#include <linux/nvmem-consumer.h> > +#include <linux/of.h> > +#include <linux/of_device.h> You probably don't need this header and the implicit includes it makes are dropped now in linux-next. Please check what you actually need and make them explicit. Rob ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2 1/2] usb: typec: Support sprd_pmic_typec driver 2023-12-11 7:41 ` [PATCH V2 1/2] usb: typec: Support sprd_pmic_typec driver Xinhu Wu 2023-12-11 7:53 ` Greg KH 2023-12-11 17:35 ` Rob Herring @ 2023-12-11 18:51 ` kernel test robot 2023-12-11 19:11 ` kernel test robot 3 siblings, 0 replies; 9+ messages in thread From: kernel test robot @ 2023-12-11 18:51 UTC (permalink / raw) To: Xinhu Wu, gregkh, robh+dt, krzysztof.kozlowski+dt, conor+dt, orsonzhai, baolin.wang, zhang.lyra, heikki.krogerus, linux-usb, devicetree, linux-kernel Cc: oe-kbuild-all, xinhuwu.unisoc, zhiyong.liu, peak.yang, teng.zhang1, bruce.chen, surong.pang, xingxing.luo, xinhu.wu Hi Xinhu, kernel test robot noticed the following build warnings: [auto build test WARNING on usb/usb-testing] [also build test WARNING on usb/usb-next usb/usb-linus robh/for-next westeri-thunderbolt/next linus/master v6.7-rc5 next-20231211] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Xinhu-Wu/usb-typec-Support-sprd_pmic_typec-driver/20231211-154328 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing patch link: https://lore.kernel.org/r/20231211074120.27958-2-xinhu.wu%40unisoc.com patch subject: [PATCH V2 1/2] usb: typec: Support sprd_pmic_typec driver config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20231212/202312120229.fONhCYBI-lkp@intel.com/config) compiler: m68k-linux-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231212/202312120229.fONhCYBI-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202312120229.fONhCYBI-lkp@intel.com/ All warnings (new ones prefixed by >>): drivers/usb/typec/sprd_pmic_typec.c: In function 'sprd_pmic_typec_connect': >> drivers/usb/typec/sprd_pmic_typec.c:184:9: warning: enumeration value 'TYPEC_DETACHED_SNK' not handled in switch [-Wswitch] 184 | switch (sc->state) { | ^~~~~~ >> drivers/usb/typec/sprd_pmic_typec.c:184:9: warning: enumeration value 'TYPEC_ATTACHWAIT_SNK' not handled in switch [-Wswitch] >> drivers/usb/typec/sprd_pmic_typec.c:184:9: warning: enumeration value 'TYPEC_DETACHED_SRC' not handled in switch [-Wswitch] >> drivers/usb/typec/sprd_pmic_typec.c:184:9: warning: enumeration value 'TYPEC_ATTACHWAIT_SRC' not handled in switch [-Wswitch] >> drivers/usb/typec/sprd_pmic_typec.c:184:9: warning: enumeration value 'TYPEC_POWERED_CABLE' not handled in switch [-Wswitch] >> drivers/usb/typec/sprd_pmic_typec.c:184:9: warning: enumeration value 'TYPEC_AUDIO_CABLE' not handled in switch [-Wswitch] >> drivers/usb/typec/sprd_pmic_typec.c:184:9: warning: enumeration value 'TYPEC_DEBUG_CABLE' not handled in switch [-Wswitch] >> drivers/usb/typec/sprd_pmic_typec.c:184:9: warning: enumeration value 'TYPEC_TOGGLE_SLEEP' not handled in switch [-Wswitch] >> drivers/usb/typec/sprd_pmic_typec.c:184:9: warning: enumeration value 'TYPEC_ERR_RECOV' not handled in switch [-Wswitch] >> drivers/usb/typec/sprd_pmic_typec.c:184:9: warning: enumeration value 'TYPEC_DISABLED' not handled in switch [-Wswitch] >> drivers/usb/typec/sprd_pmic_typec.c:184:9: warning: enumeration value 'TYPEC_TRY_SNK' not handled in switch [-Wswitch] >> drivers/usb/typec/sprd_pmic_typec.c:184:9: warning: enumeration value 'TYPEC_TRY_WAIT_SRC' not handled in switch [-Wswitch] >> drivers/usb/typec/sprd_pmic_typec.c:184:9: warning: enumeration value 'TYPEC_TRY_SRC' not handled in switch [-Wswitch] >> drivers/usb/typec/sprd_pmic_typec.c:184:9: warning: enumeration value 'TYPEC_TRY_WAIT_SNK' not handled in switch [-Wswitch] >> drivers/usb/typec/sprd_pmic_typec.c:184:9: warning: enumeration value 'TYPEC_UNSUPOORT_ACC' not handled in switch [-Wswitch] >> drivers/usb/typec/sprd_pmic_typec.c:184:9: warning: enumeration value 'TYPEC_ORIENTED_DEBUG' not handled in switch [-Wswitch] vim +/TYPEC_DETACHED_SNK +184 drivers/usb/typec/sprd_pmic_typec.c 173 174 static int sprd_pmic_typec_connect(struct sprd_pmic_typec *sc, u32 status) 175 { 176 enum typec_data_role data_role = TYPEC_DEVICE; 177 enum typec_role power_role = TYPEC_SINK; 178 enum typec_role vconn_role = TYPEC_SINK; 179 struct typec_partner_desc desc; 180 181 if (sc->partner) 182 return 0; 183 > 184 switch (sc->state) { 185 case TYPEC_ATTACHED_SNK: 186 power_role = TYPEC_SINK; 187 data_role = TYPEC_DEVICE; 188 vconn_role = TYPEC_SINK; 189 break; 190 case TYPEC_ATTACHED_SRC: 191 power_role = TYPEC_SOURCE; 192 data_role = TYPEC_HOST; 193 vconn_role = TYPEC_SOURCE; 194 break; 195 } 196 197 desc.usb_pd = 0; 198 desc.identity = NULL; 199 if (sc->state == TYPEC_AUDIO_CABLE) 200 desc.accessory = TYPEC_ACCESSORY_AUDIO; 201 else if (sc->state == TYPEC_DEBUG_CABLE) 202 desc.accessory = TYPEC_ACCESSORY_DEBUG; 203 else 204 desc.accessory = TYPEC_ACCESSORY_NONE; 205 206 sc->partner = typec_register_partner(sc->port, &desc); 207 if (!sc->partner) 208 return -ENODEV; 209 210 typec_set_pwr_opmode(sc->port, TYPEC_PWR_MODE_USB); 211 typec_set_pwr_role(sc->port, power_role); 212 typec_set_data_role(sc->port, data_role); 213 typec_set_vconn_role(sc->port, vconn_role); 214 215 switch (sc->state) { 216 case TYPEC_ATTACHED_SNK: 217 sc->pre_state = TYPEC_ATTACHED_SNK; 218 /*notify USB, USB PHY, charger, and bc1p2 driver*/ 219 extcon_set_state_sync(sc->edev, EXTCON_USB, true); 220 break; 221 case TYPEC_ATTACHED_SRC: 222 sc->pre_state = TYPEC_ATTACHED_SRC; 223 /*notify USB, USB PHY driver*/ 224 extcon_set_state_sync(sc->edev, EXTCON_USB_HOST, true); 225 break; 226 case TYPEC_AUDIO_CABLE: 227 /*notify analog audio driver*/ 228 sc->pre_state = TYPEC_AUDIO_CABLE; 229 extcon_set_state_sync(sc->edev, EXTCON_JACK_HEADPHONE, true); 230 break; 231 default: 232 break; 233 } 234 235 spin_lock(&sc->lock); 236 sc->partner_connected = true; 237 spin_unlock(&sc->lock); 238 sprd_pmic_typec_set_cc_polarity_role(sc); 239 240 return 0; 241 } 242 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2 1/2] usb: typec: Support sprd_pmic_typec driver 2023-12-11 7:41 ` [PATCH V2 1/2] usb: typec: Support sprd_pmic_typec driver Xinhu Wu ` (2 preceding siblings ...) 2023-12-11 18:51 ` kernel test robot @ 2023-12-11 19:11 ` kernel test robot 3 siblings, 0 replies; 9+ messages in thread From: kernel test robot @ 2023-12-11 19:11 UTC (permalink / raw) To: Xinhu Wu, gregkh, robh+dt, krzysztof.kozlowski+dt, conor+dt, orsonzhai, baolin.wang, zhang.lyra, heikki.krogerus, linux-usb, devicetree, linux-kernel Cc: llvm, oe-kbuild-all, xinhuwu.unisoc, zhiyong.liu, peak.yang, teng.zhang1, bruce.chen, surong.pang, xingxing.luo, xinhu.wu Hi Xinhu, kernel test robot noticed the following build warnings: [auto build test WARNING on usb/usb-testing] [also build test WARNING on usb/usb-next usb/usb-linus robh/for-next westeri-thunderbolt/next linus/master v6.7-rc5 next-20231211] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Xinhu-Wu/usb-typec-Support-sprd_pmic_typec-driver/20231211-154328 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing patch link: https://lore.kernel.org/r/20231211074120.27958-2-xinhu.wu%40unisoc.com patch subject: [PATCH V2 1/2] usb: typec: Support sprd_pmic_typec driver config: powerpc-allmodconfig (https://download.01.org/0day-ci/archive/20231212/202312120233.giTFvDie-lkp@intel.com/config) compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231212/202312120233.giTFvDie-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202312120233.giTFvDie-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/usb/typec/sprd_pmic_typec.c:184:10: warning: 16 enumeration values not handled in switch: 'TYPEC_DETACHED_SNK', 'TYPEC_ATTACHWAIT_SNK', 'TYPEC_DETACHED_SRC'... [-Wswitch] 184 | switch (sc->state) { | ^~~~~~~~~ 1 warning generated. vim +184 drivers/usb/typec/sprd_pmic_typec.c 173 174 static int sprd_pmic_typec_connect(struct sprd_pmic_typec *sc, u32 status) 175 { 176 enum typec_data_role data_role = TYPEC_DEVICE; 177 enum typec_role power_role = TYPEC_SINK; 178 enum typec_role vconn_role = TYPEC_SINK; 179 struct typec_partner_desc desc; 180 181 if (sc->partner) 182 return 0; 183 > 184 switch (sc->state) { 185 case TYPEC_ATTACHED_SNK: 186 power_role = TYPEC_SINK; 187 data_role = TYPEC_DEVICE; 188 vconn_role = TYPEC_SINK; 189 break; 190 case TYPEC_ATTACHED_SRC: 191 power_role = TYPEC_SOURCE; 192 data_role = TYPEC_HOST; 193 vconn_role = TYPEC_SOURCE; 194 break; 195 } 196 197 desc.usb_pd = 0; 198 desc.identity = NULL; 199 if (sc->state == TYPEC_AUDIO_CABLE) 200 desc.accessory = TYPEC_ACCESSORY_AUDIO; 201 else if (sc->state == TYPEC_DEBUG_CABLE) 202 desc.accessory = TYPEC_ACCESSORY_DEBUG; 203 else 204 desc.accessory = TYPEC_ACCESSORY_NONE; 205 206 sc->partner = typec_register_partner(sc->port, &desc); 207 if (!sc->partner) 208 return -ENODEV; 209 210 typec_set_pwr_opmode(sc->port, TYPEC_PWR_MODE_USB); 211 typec_set_pwr_role(sc->port, power_role); 212 typec_set_data_role(sc->port, data_role); 213 typec_set_vconn_role(sc->port, vconn_role); 214 215 switch (sc->state) { 216 case TYPEC_ATTACHED_SNK: 217 sc->pre_state = TYPEC_ATTACHED_SNK; 218 /*notify USB, USB PHY, charger, and bc1p2 driver*/ 219 extcon_set_state_sync(sc->edev, EXTCON_USB, true); 220 break; 221 case TYPEC_ATTACHED_SRC: 222 sc->pre_state = TYPEC_ATTACHED_SRC; 223 /*notify USB, USB PHY driver*/ 224 extcon_set_state_sync(sc->edev, EXTCON_USB_HOST, true); 225 break; 226 case TYPEC_AUDIO_CABLE: 227 /*notify analog audio driver*/ 228 sc->pre_state = TYPEC_AUDIO_CABLE; 229 extcon_set_state_sync(sc->edev, EXTCON_JACK_HEADPHONE, true); 230 break; 231 default: 232 break; 233 } 234 235 spin_lock(&sc->lock); 236 sc->partner_connected = true; 237 spin_unlock(&sc->lock); 238 sprd_pmic_typec_set_cc_polarity_role(sc); 239 240 return 0; 241 } 242 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH V2 2/2] dt-bindings: usb: Add an Spreadtrum pmic typec yaml 2023-12-11 7:41 [PATCH V2 0/2] usb: typec: sprd: Add Unisoc PMIC typec driver Xinhu Wu 2023-12-11 7:41 ` [PATCH V2 1/2] usb: typec: Support sprd_pmic_typec driver Xinhu Wu @ 2023-12-11 7:41 ` Xinhu Wu 2023-12-11 8:20 ` Rob Herring 2023-12-11 19:35 ` kernel test robot 1 sibling, 2 replies; 9+ messages in thread From: Xinhu Wu @ 2023-12-11 7:41 UTC (permalink / raw) To: gregkh, robh+dt, krzysztof.kozlowski+dt, conor+dt, orsonzhai, baolin.wang, zhang.lyra, heikki.krogerus, linux-usb, devicetree, linux-kernel Cc: xinhuwu.unisoc, zhiyong.liu, peak.yang, teng.zhang1, bruce.chen, surong.pang, xingxing.luo, xinhu.wu Add device tree binding Documentation details for Spreadtrum pmic typec driver Signed-off-by: Xinhu Wu <xinhu.wu@unisoc.com> --- .../bindings/usb/sprd,pmic_typec.yaml | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Documentation/devicetree/bindings/usb/sprd,pmic_typec.yaml diff --git a/Documentation/devicetree/bindings/usb/sprd,pmic_typec.yaml b/Documentation/devicetree/bindings/usb/sprd,pmic_typec.yaml new file mode 100644 index 000000000000..e522ac02026b --- /dev/null +++ b/Documentation/devicetree/bindings/usb/sprd,pmic_typec.yaml @@ -0,0 +1,65 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/usb/sprd,pmic-typec.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Unisoc SC27xx Type-C port controller + +maintainers: + - Xinhu Wu <xinhu.wu@unisoc.com> + +description: + Supports the typec found on these PMICs. + +properties: + compatible: + enum: + - sprd,sc2730-typec + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + sprd,mode: + maxItems: 1 + description: the number indicates src, snk or drp. + enum: [0, 1, 2] + + nvmem-cells: + maxItems: 2 + description: + A phandle to the 'cc resistance' trim data provided by + a nvmem device. + + nvmem-cell-names: + items: + - const: typec_cc1_cal + - const: typec_cc2_cal + +required: + - compatible + - reg + - interrupts + - sprd,mode + - nvmem-cells + - nvmem-cell-names + +examples: + - | + #include <dt-bindings/interrupt-controller/irq.h> + pmic { + #address-cells = <1>; + #size-cells = <0>; + pmic_typec: typec@380 { + compatible = "sprd,sc2730-typec"; + reg = <0x380>; + interrupt-parent = <&sc2730_pmic>; + interrupts = <8>; + sprd,mode = <2>; + nvmem-cells = <&typec_cc1_cal>, <&typec_ccc2_cal>; + nvmem-cell-names = "typec_cc1_cal","typec_cc2_cal"; + }; + }; -- 2.17.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH V2 2/2] dt-bindings: usb: Add an Spreadtrum pmic typec yaml 2023-12-11 7:41 ` [PATCH V2 2/2] dt-bindings: usb: Add an Spreadtrum pmic typec yaml Xinhu Wu @ 2023-12-11 8:20 ` Rob Herring 2023-12-11 19:35 ` kernel test robot 1 sibling, 0 replies; 9+ messages in thread From: Rob Herring @ 2023-12-11 8:20 UTC (permalink / raw) To: Xinhu Wu Cc: surong.pang, zhang.lyra, bruce.chen, heikki.krogerus, orsonzhai, xinhuwu.unisoc, baolin.wang, zhiyong.liu, krzysztof.kozlowski+dt, linux-usb, linux-kernel, teng.zhang1, devicetree, peak.yang, gregkh, xingxing.luo, conor+dt, robh+dt On Mon, 11 Dec 2023 15:41:20 +0800, Xinhu Wu wrote: > Add device tree binding Documentation details for > Spreadtrum pmic typec driver > > Signed-off-by: Xinhu Wu <xinhu.wu@unisoc.com> > --- > .../bindings/usb/sprd,pmic_typec.yaml | 65 +++++++++++++++++++ > 1 file changed, 65 insertions(+) > create mode 100644 Documentation/devicetree/bindings/usb/sprd,pmic_typec.yaml > My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check' on your patch (DT_CHECKER_FLAGS is new in v5.13): yamllint warnings/errors: ./Documentation/devicetree/bindings/usb/sprd,pmic_typec.yaml:28:18: [error] syntax error: mapping values are not allowed here (syntax) dtschema/dtc warnings/errors: make[2]: *** Deleting file 'Documentation/devicetree/bindings/usb/sprd,pmic_typec.example.dts' Documentation/devicetree/bindings/usb/sprd,pmic_typec.yaml:28:18: mapping values are not allowed in this context make[2]: *** [Documentation/devicetree/bindings/Makefile:26: Documentation/devicetree/bindings/usb/sprd,pmic_typec.example.dts] Error 1 make[2]: *** Waiting for unfinished jobs.... ./Documentation/devicetree/bindings/usb/sprd,pmic_typec.yaml:28:18: mapping values are not allowed in this context /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/usb/sprd,pmic_typec.yaml: ignoring, error parsing file make[1]: *** [/builds/robherring/dt-review-ci/linux/Makefile:1424: dt_binding_check] Error 2 make: *** [Makefile:234: __sub-make] Error 2 doc reference errors (make refcheckdocs): See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20231211074120.27958-3-xinhu.wu@unisoc.com The base for the series is generally the latest rc1. A different dependency should be noted in *this* patch. If you already ran 'make dt_binding_check' and didn't see the above error(s), then make sure 'yamllint' is installed and dt-schema is up to date: pip3 install dtschema --upgrade Please check and re-submit after running the above command yourself. Note that DT_SCHEMA_FILES can be set to your schema file to speed up checking your schema. However, it must be unset to test all examples with your schema. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2 2/2] dt-bindings: usb: Add an Spreadtrum pmic typec yaml 2023-12-11 7:41 ` [PATCH V2 2/2] dt-bindings: usb: Add an Spreadtrum pmic typec yaml Xinhu Wu 2023-12-11 8:20 ` Rob Herring @ 2023-12-11 19:35 ` kernel test robot 1 sibling, 0 replies; 9+ messages in thread From: kernel test robot @ 2023-12-11 19:35 UTC (permalink / raw) To: Xinhu Wu, gregkh, robh+dt, krzysztof.kozlowski+dt, conor+dt, orsonzhai, baolin.wang, zhang.lyra, heikki.krogerus, linux-usb, devicetree, linux-kernel Cc: oe-kbuild-all, xinhuwu.unisoc, zhiyong.liu, peak.yang, teng.zhang1, bruce.chen, surong.pang, xingxing.luo, xinhu.wu Hi Xinhu, kernel test robot noticed the following build warnings: [auto build test WARNING on usb/usb-testing] [also build test WARNING on usb/usb-next usb/usb-linus robh/for-next westeri-thunderbolt/next linus/master v6.7-rc5 next-20231211] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Xinhu-Wu/usb-typec-Support-sprd_pmic_typec-driver/20231211-154328 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing patch link: https://lore.kernel.org/r/20231211074120.27958-3-xinhu.wu%40unisoc.com patch subject: [PATCH V2 2/2] dt-bindings: usb: Add an Spreadtrum pmic typec yaml compiler: loongarch64-linux-gcc (GCC) 13.2.0 reproduce: (https://download.01.org/0day-ci/archive/20231212/202312120307.jhk5BElS-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202312120307.jhk5BElS-lkp@intel.com/ dtcheck warnings: (new ones prefixed by >>) >> Documentation/devicetree/bindings/usb/sprd,pmic_typec.yaml:28:18: [error] syntax error: mapping values are not allowed here (syntax) -- >> Documentation/devicetree/bindings/usb/sprd,pmic_typec.yaml:28:18: mapping values are not allowed in this context Documentation/devicetree/bindings/iio/pressure/honeywell,mprls0025pa.yaml: properties:honeywell,pmin-pascal: '$ref' should not be valid under {'const': '$ref'} hint: Standard unit suffix properties don't need a type $ref from schema $id: http://devicetree.org/meta-schemas/core.yaml# Documentation/devicetree/bindings/iio/pressure/honeywell,mprls0025pa.yaml: properties:honeywell,pmax-pascal: '$ref' should not be valid under {'const': '$ref'} hint: Standard unit suffix properties don't need a type $ref from schema $id: http://devicetree.org/meta-schemas/core.yaml# -- >> Documentation/devicetree/bindings/usb/sprd,pmic_typec.yaml: ignoring, error parsing file vim +28 Documentation/devicetree/bindings/usb/sprd,pmic_typec.yaml 8 9 maintainers: 10 - Xinhu Wu <xinhu.wu@unisoc.com> 11 12 description: 13 Supports the typec found on these PMICs. 14 15 properties: 16 compatible: 17 enum: 18 - sprd,sc2730-typec 19 20 reg: 21 maxItems: 1 22 23 interrupts: 24 maxItems: 1 25 26 sprd,mode: 27 maxItems: 1 > 28 description: the number indicates src, snk or drp. -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2023-12-11 19:36 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-12-11 7:41 [PATCH V2 0/2] usb: typec: sprd: Add Unisoc PMIC typec driver Xinhu Wu 2023-12-11 7:41 ` [PATCH V2 1/2] usb: typec: Support sprd_pmic_typec driver Xinhu Wu 2023-12-11 7:53 ` Greg KH 2023-12-11 17:35 ` Rob Herring 2023-12-11 18:51 ` kernel test robot 2023-12-11 19:11 ` kernel test robot 2023-12-11 7:41 ` [PATCH V2 2/2] dt-bindings: usb: Add an Spreadtrum pmic typec yaml Xinhu Wu 2023-12-11 8:20 ` Rob Herring 2023-12-11 19:35 ` kernel test robot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).