On Thu, Jan 16, 2025 at 7:55 PM Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> wrote: > Hi, > > On Tue, Jan 14, 2025 at 01:51:26AM +0800, Pengyu Luo wrote: > > The Huawei Matebook E Go tablet implements the UCSI interface in the > > onboard EC. Add the glue driver to interface with the platform's UCSI > > implementation. > > > > Signed-off-by: Pengyu Luo <mitltlatltl@xxxxxxxxx> > > --- > > drivers/usb/typec/ucsi/Kconfig | 11 + > > drivers/usb/typec/ucsi/Makefile | 1 + > > drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c | 526 ++++++++++++++++++++ > > 3 files changed, 538 insertions(+) > > create mode 100644 drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c > > > > diff --git a/drivers/usb/typec/ucsi/Kconfig b/drivers/usb/typec/ucsi/Kconfig > > index 75559601f..e94956d27 100644 > > --- a/drivers/usb/typec/ucsi/Kconfig > > +++ b/drivers/usb/typec/ucsi/Kconfig > > @@ -91,4 +91,15 @@ config UCSI_LENOVO_YOGA_C630 > > To compile the driver as a module, choose M here: the module will be > > called ucsi_yoga_c630. > > > > +config UCSI_HUAWEI_GAOKUN > > + tristate "UCSI Interface Driver for Huawei Matebook E Go" > > + depends on EC_HUAWEI_GAOKUN > > + select DRM_AUX_HPD_BRIDGE > > + help > > + This driver enables UCSI support on the Huawei Matebook E Go tablet, > > + which is a sc8280xp-based 2-in-1 tablet. > > + > > + To compile the driver as a module, choose M here: the module will be > > + called ucsi_huawei_gaokun. > > + > > endif > > diff --git a/drivers/usb/typec/ucsi/Makefile b/drivers/usb/typec/ucsi/Makefile > > index be98a8791..dbc571763 100644 > > --- a/drivers/usb/typec/ucsi/Makefile > > +++ b/drivers/usb/typec/ucsi/Makefile > > @@ -23,3 +23,4 @@ obj-$(CONFIG_UCSI_STM32G0) += ucsi_stm32g0.o > > obj-$(CONFIG_UCSI_PMIC_GLINK) += ucsi_glink.o > > obj-$(CONFIG_CROS_EC_UCSI) += cros_ec_ucsi.o > > obj-$(CONFIG_UCSI_LENOVO_YOGA_C630) += ucsi_yoga_c630.o > > +obj-$(CONFIG_UCSI_HUAWEI_GAOKUN) += ucsi_huawei_gaokun.o > > diff --git a/drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c b/drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c > > new file mode 100644 > > index 000000000..da1993805 > > --- /dev/null > > +++ b/drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c > > @@ -0,0 +1,527 @@ > > +// SPDX-License-Identifier: GPL-2.0-only > > +/* > > + * ucsi-huawei-gaokun - A UCSI driver for HUAWEI Matebook E Go > > + * > > + * reference: drivers/usb/typec/ucsi/ucsi_yoga_c630.c > > + * drivers/usb/typec/ucsi/ucsi_glink.c > > + * drivers/soc/qcom/pmic_glink_altmode.c > > + * > > + * Copyright (C) 2024 Pengyu Luo <mitltlatltl@xxxxxxxxx> > > + */ > > + > > +#include <drm/bridge/aux-bridge.h> > > +#include <linux/auxiliary_bus.h> > > +#include <linux/bitops.h> > > +#include <linux/completion.h> > > +#include <linux/container_of.h> > > +#include <linux/module.h> > > +#include <linux/notifier.h> > > +#include <linux/of.h> > > +#include <linux/platform_data/huawei-gaokun-ec.h> > > +#include <linux/string.h> > > +#include <linux/usb/pd_vdo.h> > > +#include <linux/usb/typec_altmode.h> > > +#include <linux/usb/typec_dp.h> > > +#include <linux/workqueue_types.h> > > + > > +#include "ucsi.h" > > + > > +#define EC_EVENT_UCSI 0x21 > > +#define EC_EVENT_USB 0x22 > > + > > +#define GAOKUN_CCX_MASK GENMASK(1, 0) > > +#define GAOKUN_MUX_MASK GENMASK(3, 2) > > + > > +#define GAOKUN_DPAM_MASK GENMASK(3, 0) > > +#define GAOKUN_HPD_STATE_MASK BIT(4) > > +#define GAOKUN_HPD_IRQ_MASK BIT(5) > > + > > +#define GET_IDX(updt) (ffs(updt) - 1) > > + > > +#define CCX_TO_ORI(ccx) (++ccx % 3) /* convert ccx to enum typec_orientation */ > > + > > +/* Configuration Channel Extension */ > > +enum gaokun_ucsi_ccx { > > + USBC_CCX_NORMAL, > > + USBC_CCX_REVERSE, > > + USBC_CCX_NONE, > > +}; > > + > > +enum gaokun_ucsi_mux { > > + USBC_MUX_NONE, > > + USBC_MUX_USB_2L, > > + USBC_MUX_DP_4L, > > + USBC_MUX_USB_DP, > > +}; > > Missing newline. > > > +/* based on pmic_glink_altmode_pin_assignment */ > > +enum gaokun_ucsi_dpam_pan { /* DP Alt Mode Pin Assignments */ > > + USBC_DPAM_PAN_NONE, > > + USBC_DPAM_PAN_A, /* Not supported after USB Type-C Standard v1.0b */ > > + USBC_DPAM_PAN_B, /* Not supported after USB Type-C Standard v1.0b */ > > + USBC_DPAM_PAN_C, /* USBC_DPAM_PAN_C_REVERSE - 6 */ > > + USBC_DPAM_PAN_D, > > + USBC_DPAM_PAN_E, > > + USBC_DPAM_PAN_F, /* Not supported after USB Type-C Standard v1.0b */ > > + USBC_DPAM_PAN_A_REVERSE,/* Not supported after USB Type-C Standard v1.0b */ > > + USBC_DPAM_PAN_B_REVERSE,/* Not supported after USB Type-C Standard v1.0b */ > > + USBC_DPAM_PAN_C_REVERSE, > > + USBC_DPAM_PAN_D_REVERSE, > > + USBC_DPAM_PAN_E_REVERSE, > > + USBC_DPAM_PAN_F_REVERSE,/* Not supported after USB Type-C Standard v1.0b */ > > +}; > > + > > +struct gaokun_ucsi_reg { > > + u8 num_ports; > > + u8 port_updt; > > + u8 port_data[4]; > > + u8 checksum; > > + u8 reserved; > > +} __packed; > > + > > +struct gaokun_ucsi_port { > > + struct completion usb_ack; > > + spinlock_t lock; > > Locks need to be commented. Did you run checkpatch.pl on this? > I ran, without `--strict` though. I got it, I will do it. > > + struct gaokun_ucsi *ucsi; > > + struct auxiliary_device *bridge; > > + > > + int idx; > > + enum gaokun_ucsi_ccx ccx; > > + enum gaokun_ucsi_mux mux; > > + u8 mode; > > + u16 svid; > > + u8 hpd_state; > > + u8 hpd_irq; > > +}; > > + > > +struct gaokun_ucsi { > > + struct gaokun_ec *ec; > > + struct ucsi *ucsi; > > + struct gaokun_ucsi_port *ports; > > + struct device *dev; > > + struct delayed_work work; > > + struct notifier_block nb; > > + u16 version; > > + u8 num_ports; > > +}; > > thanks, > > -- > heikki Best wishes, Pengyu