[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20250116182618.135903-1-mitltlatltl@gmail.com>
Date: Fri, 17 Jan 2025 02:26:10 +0800
From: Pengyu Luo <mitltlatltl@...il.com>
To: heikki.krogerus@...ux.intel.com
Cc: gregkh@...uxfoundation.org,
linux-kernel@...r.kernel.org,
linux-usb@...r.kernel.org,
mitltlatltl@...il.com
Subject: Re: [PATCH v3 4/6] usb: typec: ucsi: add Huawei Matebook E Go ucsi driver
On Thu, Jan 16, 2025 at 7:55 PM Heikki Krogerus <heikki.krogerus@...ux.intel.com> 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@...il.com>
> > ---
> > 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@...il.com>
> > + */
> > +
> > +#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
Powered by blists - more mailing lists