Message ID | 20220801101447.86207-1-gene.chen.richtek@gmail.com |
---|---|
Headers | show |
Series | usb: typec: tcpci_rt1711h: Add compatible with rt1715 | expand |
Hi Gene, On Mon, Aug 01, 2022 at 06:14:42PM +0800, Gene Chen wrote: > From: Gene Chen <gene_chen@richtek.com> > > replace overwrite whole register with update bits > > Signed-off-by: Gene Chen <gene_chen@richtek.com> > --- > drivers/usb/typec/tcpm/tcpci_rt1711h.c | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > > diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c > index b56a0880a044..6197d9a05d36 100644 > --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c > +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c > @@ -5,13 +5,15 @@ > * Richtek RT1711H Type-C Chip Driver > */ > > -#include <linux/kernel.h> > -#include <linux/module.h> > +#include <linux/bits.h> > +#include <linux/gpio/consumer.h> > #include <linux/i2c.h> > #include <linux/interrupt.h> > -#include <linux/gpio/consumer.h> > -#include <linux/usb/tcpm.h> > +#include <linux/kernel.h> > +#include <linux/module.h> > #include <linux/regmap.h> > +#include <linux/usb/tcpm.h> That header reshuffling is not necessary for this change - at least you are not giving any reason for it in your commit message. If there is no real need for that in this patch, then please leave the headers as they are. You can propose changing the order of the headers in a separate patch. Though, I would not bother with it unless there is some real benefit in doing so, and I'm pretty sure there isn't any. > #include "tcpci.h" > > #define RT1711H_VID 0x29CF > @@ -23,6 +25,7 @@ > #define RT1711H_RTCTRL8_SET(ck300, ship_off, auto_idle, tout) \ > (((ck300) << 7) | ((ship_off) << 5) | \ > ((auto_idle) << 3) | ((tout) & 0x07)) > +#define RT1711H_AUTOIDLEEN BIT(3) > > #define RT1711H_RTCTRL11 0x9E > > @@ -109,8 +112,8 @@ static int rt1711h_set_vconn(struct tcpci *tcpci, struct tcpci_data *tdata, > { > struct rt1711h_chip *chip = tdata_to_rt1711h(tdata); > > - return rt1711h_write8(chip, RT1711H_RTCTRL8, > - RT1711H_RTCTRL8_SET(0, 1, !enable, 2)); > + return regmap_update_bits(chip->data.regmap, RT1711H_RTCTRL8, > + RT1711H_AUTOIDLEEN, enable ? 0 : RT1711H_AUTOIDLEEN); > } > > static int rt1711h_start_drp_toggling(struct tcpci *tcpci, > -- > 2.25.1 thanks,
On Mon, Aug 01, 2022 at 06:14:43PM +0800, Gene Chen wrote: > From: Gene Chen <gene_chen@richtek.com> > > Add regulator support when source vbus > > Signed-off-by: Gene Chen <gene_chen@richtek.com> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> > --- > drivers/usb/typec/tcpm/tcpci_rt1711h.c | 28 ++++++++++++++++++++++++++ > 1 file changed, 28 insertions(+) > > diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c > index 6197d9a05d36..df7bfe299987 100644 > --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c > +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c > @@ -12,6 +12,7 @@ > #include <linux/kernel.h> > #include <linux/module.h> > #include <linux/regmap.h> > +#include <linux/regulator/consumer.h> > #include <linux/usb/tcpm.h> > > #include "tcpci.h" > @@ -42,6 +43,8 @@ struct rt1711h_chip { > struct tcpci_data data; > struct tcpci *tcpci; > struct device *dev; > + struct regulator *vbus; > + bool src_en; > }; > > static int rt1711h_read16(struct rt1711h_chip *chip, unsigned int reg, u16 *val) > @@ -105,6 +108,26 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata) > > /* dcSRC.DRP : 33% */ > return rt1711h_write16(chip, RT1711H_RTCTRL16, 330); > + > +} > + > +static int rt1711h_set_vbus(struct tcpci *tcpci, struct tcpci_data *tdata, > + bool src, bool snk) > +{ > + struct rt1711h_chip *chip = tdata_to_rt1711h(tdata); > + int ret; > + > + if (chip->src_en == src) > + return 0; > + > + if (src) > + ret = regulator_enable(chip->vbus); > + else > + ret = regulator_disable(chip->vbus); > + > + if (!ret) > + chip->src_en = src; > + return ret; > } > > static int rt1711h_set_vconn(struct tcpci *tcpci, struct tcpci_data *tdata, > @@ -248,7 +271,12 @@ static int rt1711h_probe(struct i2c_client *client, > if (ret < 0) > return ret; > > + chip->vbus = devm_regulator_get(&client->dev, "vbus"); > + if (IS_ERR(chip->vbus)) > + return PTR_ERR(chip->vbus); > + > chip->data.init = rt1711h_init; > + chip->data.set_vbus = rt1711h_set_vbus; > chip->data.set_vconn = rt1711h_set_vconn; > chip->data.start_drp_toggling = rt1711h_start_drp_toggling; > chip->tcpci = tcpci_register_port(chip->dev, &chip->data); > -- > 2.25.1
Hi Gene, On Mon, Aug 01, 2022 at 06:14:44PM +0800, Gene Chen wrote: > From: Gene Chen <gene_chen@richtek.com> > > Add initial phy setting about phy dicard retry, > rx filter deglitech time and BMC-encoded wait time I'm sorry, but what does "deglitech" mean? Is it just a typo? > Signed-off-by: Gene Chen <gene_chen@richtek.com> > Reviewed-by: Guenter Roeck <linux@roeck-us.net> > --- > drivers/usb/typec/tcpm/tcpci_rt1711h.c | 15 ++++++++++++++- > 1 file changed, 14 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c > index df7bfe299987..33d8ea95b7c1 100644 > --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c > +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c > @@ -20,6 +20,9 @@ > #define RT1711H_VID 0x29CF > #define RT1711H_PID 0x1711 > > +#define RT1711H_PHYCTRL1 0x80 > +#define RT1711H_PHYCTRL2 0x81 > + > #define RT1711H_RTCTRL8 0x9B > > /* Autoidle timeout = (tout * 2 + 1) * 6.4ms */ > @@ -107,8 +110,18 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata) > return ret; > > /* dcSRC.DRP : 33% */ > - return rt1711h_write16(chip, RT1711H_RTCTRL16, 330); > + ret = rt1711h_write16(chip, RT1711H_RTCTRL16, 330); > + if (ret < 0) > + return ret; > + > + /* Enable phy discard retry, retry count 7, rx filter deglitech 100 us */ > + ret = rt1711h_write8(chip, RT1711H_PHYCTRL1, 0xF1); > + if (ret < 0) > + return ret; > > + /* Decrease wait time of BMC-encoded 1 bit from 2.67us to 2.55us */ > + /* wait time : (val * .4167) us */ > + return rt1711h_write8(chip, RT1711H_PHYCTRL2, 62); > } > > static int rt1711h_set_vbus(struct tcpci *tcpci, struct tcpci_data *tdata, > -- > 2.25.1 thanks,
On Mon, Aug 01, 2022 at 06:14:45PM +0800, Gene Chen wrote: > From: Gene Chen <gene_chen@richtek.com> > > Add compatible id with rt1715, and add initial setting for > specific support PD30 command. > > Signed-off-by: Gene Chen <gene_chen@richtek.com> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> > --- > drivers/usb/typec/tcpm/tcpci_rt1711h.c | 43 ++++++++++++++++++++------ > 1 file changed, 34 insertions(+), 9 deletions(-) > > diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c > index 33d8ea95b7c1..da35dd3e8a59 100644 > --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c > +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c > @@ -19,6 +19,8 @@ > > #define RT1711H_VID 0x29CF > #define RT1711H_PID 0x1711 > +#define RT1711H_DID 0x2171 > +#define RT1715_DID 0x2173 > > #define RT1711H_PHYCTRL1 0x80 > #define RT1711H_PHYCTRL2 0x81 > @@ -30,6 +32,7 @@ > (((ck300) << 7) | ((ship_off) << 5) | \ > ((auto_idle) << 3) | ((tout) & 0x07)) > #define RT1711H_AUTOIDLEEN BIT(3) > +#define RT1711H_ENEXTMSG BIT(4) > > #define RT1711H_RTCTRL11 0x9E > > @@ -48,6 +51,7 @@ struct rt1711h_chip { > struct device *dev; > struct regulator *vbus; > bool src_en; > + u16 did; > }; > > static int rt1711h_read16(struct rt1711h_chip *chip, unsigned int reg, u16 *val) > @@ -84,8 +88,9 @@ static struct rt1711h_chip *tdata_to_rt1711h(struct tcpci_data *tdata) > > static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata) > { > - int ret; > struct rt1711h_chip *chip = tdata_to_rt1711h(tdata); > + struct regmap *regmap = chip->data.regmap; > + int ret; > > /* CK 300K from 320K, shipping off, auto_idle enable, tout = 32ms */ > ret = rt1711h_write8(chip, RT1711H_RTCTRL8, > @@ -93,6 +98,14 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata) > if (ret < 0) > return ret; > > + /* Enable PD30 extended message for RT1715 */ > + if (chip->did == RT1715_DID) { > + ret = regmap_update_bits(regmap, RT1711H_RTCTRL8, > + RT1711H_ENEXTMSG, RT1711H_ENEXTMSG); > + if (ret < 0) > + return ret; > + } > + > /* I2C reset : (val + 1) * 12.5ms */ > ret = rt1711h_write8(chip, RT1711H_RTCTRL11, > RT1711H_RTCTRL11_SET(1, 0x0F)); > @@ -230,7 +243,7 @@ static int rt1711h_sw_reset(struct rt1711h_chip *chip) > return 0; > } > > -static int rt1711h_check_revision(struct i2c_client *i2c) > +static int rt1711h_check_revision(struct i2c_client *i2c, struct rt1711h_chip *chip) > { > int ret; > > @@ -248,7 +261,15 @@ static int rt1711h_check_revision(struct i2c_client *i2c) > dev_err(&i2c->dev, "pid is not correct, 0x%04x\n", ret); > return -ENODEV; > } > - return 0; > + ret = i2c_smbus_read_word_data(i2c, TCPC_BCD_DEV); > + if (ret < 0) > + return ret; > + if (ret != chip->did) { > + dev_err(&i2c->dev, "did is not correct, 0x%04x\n", ret); > + return -ENODEV; > + } > + dev_dbg(&i2c->dev, "did is 0x%04x\n", ret); > + return ret; > } > > static int rt1711h_probe(struct i2c_client *client, > @@ -257,16 +278,18 @@ static int rt1711h_probe(struct i2c_client *client, > int ret; > struct rt1711h_chip *chip; > > - ret = rt1711h_check_revision(client); > + chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); > + if (!chip) > + return -ENOMEM; > + > + chip->did = (size_t)device_get_match_data(&client->dev); > + > + ret = rt1711h_check_revision(client, chip); > if (ret < 0) { > dev_err(&client->dev, "check vid/pid fail\n"); > return ret; > } > > - chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); > - if (!chip) > - return -ENOMEM; > - > chip->data.regmap = devm_regmap_init_i2c(client, > &rt1711h_regmap_config); > if (IS_ERR(chip->data.regmap)) > @@ -317,13 +340,15 @@ static int rt1711h_remove(struct i2c_client *client) > > static const struct i2c_device_id rt1711h_id[] = { > { "rt1711h", 0 }, > + { "rt1715", 0 }, > { } > }; > MODULE_DEVICE_TABLE(i2c, rt1711h_id); > > #ifdef CONFIG_OF > static const struct of_device_id rt1711h_of_match[] = { > - { .compatible = "richtek,rt1711h", }, > + { .compatible = "richtek,rt1711h", .data = (void *)RT1711H_DID }, > + { .compatible = "richtek,rt1715", .data = (void *)RT1715_DID }, > {}, > }; > MODULE_DEVICE_TABLE(of, rt1711h_of_match); > -- > 2.25.1
On Mon, Aug 01, 2022 at 06:14:46PM +0800, Gene Chen wrote: > From: Gene Chen <gene_chen@richtek.com> > > Move transition function "tcpci_to_typec_cc" to common header > > Signed-off-by: Gene Chen <gene_chen@richtek.com> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> > --- > drivers/usb/typec/tcpm/tcpci.c | 22 ---------------------- > drivers/usb/typec/tcpm/tcpci.h | 23 +++++++++++++++++++++++ > 2 files changed, 23 insertions(+), 22 deletions(-) > > diff --git a/drivers/usb/typec/tcpm/tcpci.c b/drivers/usb/typec/tcpm/tcpci.c > index f33e08eb7670..0f45d456df32 100644 > --- a/drivers/usb/typec/tcpm/tcpci.c > +++ b/drivers/usb/typec/tcpm/tcpci.c > @@ -28,11 +28,6 @@ > #define VPPS_VALID_MIN_MV 100 > #define VSINKDISCONNECT_PD_MIN_PERCENT 90 > > -#define tcpc_presenting_rd(reg, cc) \ > - (!(TCPC_ROLE_CTRL_DRP & (reg)) && \ > - (((reg) & (TCPC_ROLE_CTRL_## cc ##_MASK << TCPC_ROLE_CTRL_## cc ##_SHIFT)) == \ > - (TCPC_ROLE_CTRL_CC_RD << TCPC_ROLE_CTRL_## cc ##_SHIFT))) > - > struct tcpci { > struct device *dev; > > @@ -219,23 +214,6 @@ static int tcpci_start_toggling(struct tcpc_dev *tcpc, > TCPC_CMD_LOOK4CONNECTION); > } > > -static enum typec_cc_status tcpci_to_typec_cc(unsigned int cc, bool sink) > -{ > - switch (cc) { > - case 0x1: > - return sink ? TYPEC_CC_RP_DEF : TYPEC_CC_RA; > - case 0x2: > - return sink ? TYPEC_CC_RP_1_5 : TYPEC_CC_RD; > - case 0x3: > - if (sink) > - return TYPEC_CC_RP_3_0; > - fallthrough; > - case 0x0: > - default: > - return TYPEC_CC_OPEN; > - } > -} > - > static int tcpci_get_cc(struct tcpc_dev *tcpc, > enum typec_cc_status *cc1, enum typec_cc_status *cc2) > { > diff --git a/drivers/usb/typec/tcpm/tcpci.h b/drivers/usb/typec/tcpm/tcpci.h > index b2edd45f13c6..3f45cb0426df 100644 > --- a/drivers/usb/typec/tcpm/tcpci.h > +++ b/drivers/usb/typec/tcpm/tcpci.h > @@ -166,6 +166,11 @@ > /* I2C_WRITE_BYTE_COUNT + 1 when TX_BUF_BYTE_x is only accessible I2C_WRITE_BYTE_COUNT */ > #define TCPC_TRANSMIT_BUFFER_MAX_LEN 31 > > +#define tcpc_presenting_rd(reg, cc) \ > + (!(TCPC_ROLE_CTRL_DRP & (reg)) && \ > + (((reg) & (TCPC_ROLE_CTRL_## cc ##_MASK << TCPC_ROLE_CTRL_## cc ##_SHIFT)) == \ > + (TCPC_ROLE_CTRL_CC_RD << TCPC_ROLE_CTRL_## cc ##_SHIFT))) > + > struct tcpci; > > /* > @@ -206,4 +211,22 @@ irqreturn_t tcpci_irq(struct tcpci *tcpci); > > struct tcpm_port; > struct tcpm_port *tcpci_get_tcpm_port(struct tcpci *tcpci); > + > +static inline enum typec_cc_status tcpci_to_typec_cc(unsigned int cc, bool sink) > +{ > + switch (cc) { > + case 0x1: > + return sink ? TYPEC_CC_RP_DEF : TYPEC_CC_RA; > + case 0x2: > + return sink ? TYPEC_CC_RP_1_5 : TYPEC_CC_RD; > + case 0x3: > + if (sink) > + return TYPEC_CC_RP_3_0; > + fallthrough; > + case 0x0: > + default: > + return TYPEC_CC_OPEN; > + } > +} > + > #endif /* __LINUX_USB_TCPCI_H */ > -- > 2.25.1
On Mon, Aug 01, 2022 at 06:14:47PM +0800, Gene Chen wrote: > From: Gene Chen <gene_chen@richtek.com> > > Fix CC PHY noise filter of voltage level according to > current cc voltage level > > Signed-off-by: Gene Chen <gene_chen@richtek.com> I was unable to apply this series on top of Greg's latest usb-next, so I think you need to rebase these. But in any case, for this patch FWIW: Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> > --- > drivers/usb/typec/tcpm/tcpci_rt1711h.c | 58 +++++++++++++++++++++++++- > 1 file changed, 57 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c > index da35dd3e8a59..6d2568de553b 100644 > --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c > +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c > @@ -25,8 +25,11 @@ > #define RT1711H_PHYCTRL1 0x80 > #define RT1711H_PHYCTRL2 0x81 > > -#define RT1711H_RTCTRL8 0x9B > +#define RT1711H_RTCTRL4 0x93 > +/* rx threshold of rd/rp: 1b0 for level 0.4V/0.7V, 1b1 for 0.35V/0.75V */ > +#define RT1711H_BMCIO_RXDZSEL BIT(0) > > +#define RT1711H_RTCTRL8 0x9B > /* Autoidle timeout = (tout * 2 + 1) * 6.4ms */ > #define RT1711H_RTCTRL8_SET(ck300, ship_off, auto_idle, tout) \ > (((ck300) << 7) | ((ship_off) << 5) | \ > @@ -45,6 +48,10 @@ > #define RT1711H_RTCTRL15 0xA2 > #define RT1711H_RTCTRL16 0xA3 > > +#define RT1711H_RTCTRL18 0xAF > +/* 1b0 as fixed rx threshold of rd/rp 0.55V, 1b1 depends on RTCRTL4[0] */ > +#define BMCIO_RXDZEN BIT(0) > + > struct rt1711h_chip { > struct tcpci_data data; > struct tcpci *tcpci; > @@ -165,6 +172,53 @@ static int rt1711h_set_vconn(struct tcpci *tcpci, struct tcpci_data *tdata, > RT1711H_AUTOIDLEEN, enable ? 0 : RT1711H_AUTOIDLEEN); > } > > +/* > + * Selects the CC PHY noise filter voltage level according to the remote current > + * CC voltage level. > + * > + * @status: The port's current cc status read from IC > + * Return 0 if writes succeed; failure code otherwise > + */ > +static inline int rt1711h_init_cc_params(struct rt1711h_chip *chip, u8 status) > +{ > + int ret, cc1, cc2; > + u8 role = 0; > + u32 rxdz_en, rxdz_sel; > + > + ret = rt1711h_read8(chip, TCPC_ROLE_CTRL, &role); > + if (ret < 0) > + return ret; > + > + cc1 = tcpci_to_typec_cc((status >> TCPC_CC_STATUS_CC1_SHIFT) & > + TCPC_CC_STATUS_CC1_MASK, > + status & TCPC_CC_STATUS_TERM || > + tcpc_presenting_rd(role, CC1)); > + cc2 = tcpci_to_typec_cc((status >> TCPC_CC_STATUS_CC2_SHIFT) & > + TCPC_CC_STATUS_CC2_MASK, > + status & TCPC_CC_STATUS_TERM || > + tcpc_presenting_rd(role, CC2)); > + > + if ((cc1 >= TYPEC_CC_RP_1_5 && cc2 < TYPEC_CC_RP_DEF) || > + (cc2 >= TYPEC_CC_RP_1_5 && cc1 < TYPEC_CC_RP_DEF)) { > + rxdz_en = BMCIO_RXDZEN; > + if (chip->did == RT1715_DID) > + rxdz_sel = RT1711H_BMCIO_RXDZSEL; > + else > + rxdz_sel = 0; > + } else { > + rxdz_en = 0; > + rxdz_sel = RT1711H_BMCIO_RXDZSEL; > + } > + > + ret = regmap_update_bits(chip->data.regmap, RT1711H_RTCTRL18, > + BMCIO_RXDZEN, rxdz_en); > + if (ret < 0) > + return ret; > + > + return regmap_update_bits(chip->data.regmap, RT1711H_RTCTRL4, > + RT1711H_BMCIO_RXDZSEL, rxdz_sel); > +} > + > static int rt1711h_start_drp_toggling(struct tcpci *tcpci, > struct tcpci_data *tdata, > enum typec_cc_status cc) > @@ -225,6 +279,8 @@ static irqreturn_t rt1711h_irq(int irq, void *dev_id) > /* Clear cc change event triggered by starting toggling */ > if (status & TCPC_CC_STATUS_TOGGLING) > rt1711h_write8(chip, TCPC_ALERT, TCPC_ALERT_CC_STATUS); > + else > + rt1711h_init_cc_params(chip, status); > } > > out: > -- > 2.25.1
On Tue, Aug 02, 2022 at 11:19:15AM +0300, Heikki Krogerus wrote: > Hi Gene, > > On Mon, Aug 01, 2022 at 06:14:44PM +0800, Gene Chen wrote: > > From: Gene Chen <gene_chen@richtek.com> > > > > Add initial phy setting about phy dicard retry, > > rx filter deglitech time and BMC-encoded wait time > > I'm sorry, but what does "deglitech" mean? Is it just a typo? > deglitch ? > > Signed-off-by: Gene Chen <gene_chen@richtek.com> > > Reviewed-by: Guenter Roeck <linux@roeck-us.net> > > --- > > drivers/usb/typec/tcpm/tcpci_rt1711h.c | 15 ++++++++++++++- > > 1 file changed, 14 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c > > index df7bfe299987..33d8ea95b7c1 100644 > > --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c > > +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c > > @@ -20,6 +20,9 @@ > > #define RT1711H_VID 0x29CF > > #define RT1711H_PID 0x1711 > > > > +#define RT1711H_PHYCTRL1 0x80 > > +#define RT1711H_PHYCTRL2 0x81 > > + > > #define RT1711H_RTCTRL8 0x9B > > > > /* Autoidle timeout = (tout * 2 + 1) * 6.4ms */ > > @@ -107,8 +110,18 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata) > > return ret; > > > > /* dcSRC.DRP : 33% */ > > - return rt1711h_write16(chip, RT1711H_RTCTRL16, 330); > > + ret = rt1711h_write16(chip, RT1711H_RTCTRL16, 330); > > + if (ret < 0) > > + return ret; > > + > > + /* Enable phy discard retry, retry count 7, rx filter deglitech 100 us */ > > + ret = rt1711h_write8(chip, RT1711H_PHYCTRL1, 0xF1); > > + if (ret < 0) > > + return ret; > > > > + /* Decrease wait time of BMC-encoded 1 bit from 2.67us to 2.55us */ > > + /* wait time : (val * .4167) us */ > > + return rt1711h_write8(chip, RT1711H_PHYCTRL2, 62); > > } > > > > static int rt1711h_set_vbus(struct tcpci *tcpci, struct tcpci_data *tdata, > > -- > > 2.25.1 > > thanks, > > -- > heikki
Heikki Krogerus <heikki.krogerus@linux.intel.com> 於 2022年8月2日 週二 下午3:57寫道: > > Hi Gene, > > On Mon, Aug 01, 2022 at 06:14:42PM +0800, Gene Chen wrote: > > From: Gene Chen <gene_chen@richtek.com> > > > > replace overwrite whole register with update bits > > > > Signed-off-by: Gene Chen <gene_chen@richtek.com> > > --- > > drivers/usb/typec/tcpm/tcpci_rt1711h.c | 15 +++++++++------ > > 1 file changed, 9 insertions(+), 6 deletions(-) > > > > diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c > > index b56a0880a044..6197d9a05d36 100644 > > --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c > > +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c > > @@ -5,13 +5,15 @@ > > * Richtek RT1711H Type-C Chip Driver > > */ > > > > -#include <linux/kernel.h> > > -#include <linux/module.h> > > +#include <linux/bits.h> > > +#include <linux/gpio/consumer.h> > > #include <linux/i2c.h> > > #include <linux/interrupt.h> > > -#include <linux/gpio/consumer.h> > > -#include <linux/usb/tcpm.h> > > +#include <linux/kernel.h> > > +#include <linux/module.h> > > #include <linux/regmap.h> > > +#include <linux/usb/tcpm.h> > > That header reshuffling is not necessary for this change - at least you > are not giving any reason for it in your commit message. > > If there is no real need for that in this patch, then please leave the > headers as they are. You can propose changing the order of the headers > in a separate patch. Though, I would not bother with it unless there > is some real benefit in doing so, and I'm pretty sure there isn't any. > ACK, I will remove reshuffling. It was suggested coding style by other reviewer in other driver. > > #include "tcpci.h" > > > > #define RT1711H_VID 0x29CF > > @@ -23,6 +25,7 @@ > > #define RT1711H_RTCTRL8_SET(ck300, ship_off, auto_idle, tout) \ > > (((ck300) << 7) | ((ship_off) << 5) | \ > > ((auto_idle) << 3) | ((tout) & 0x07)) > > +#define RT1711H_AUTOIDLEEN BIT(3) > > > > #define RT1711H_RTCTRL11 0x9E > > > > @@ -109,8 +112,8 @@ static int rt1711h_set_vconn(struct tcpci *tcpci, struct tcpci_data *tdata, > > { > > struct rt1711h_chip *chip = tdata_to_rt1711h(tdata); > > > > - return rt1711h_write8(chip, RT1711H_RTCTRL8, > > - RT1711H_RTCTRL8_SET(0, 1, !enable, 2)); > > + return regmap_update_bits(chip->data.regmap, RT1711H_RTCTRL8, > > + RT1711H_AUTOIDLEEN, enable ? 0 : RT1711H_AUTOIDLEEN); > > } > > > > static int rt1711h_start_drp_toggling(struct tcpci *tcpci, > > -- > > 2.25.1 > > thanks, > > -- > heikki
Guenter Roeck <linux@roeck-us.net> 於 2022年8月2日 週二 下午4:58寫道: > > On Tue, Aug 02, 2022 at 11:19:15AM +0300, Heikki Krogerus wrote: > > Hi Gene, > > > > On Mon, Aug 01, 2022 at 06:14:44PM +0800, Gene Chen wrote: > > > From: Gene Chen <gene_chen@richtek.com> > > > > > > Add initial phy setting about phy dicard retry, > > > rx filter deglitech time and BMC-encoded wait time > > > > I'm sorry, but what does "deglitech" mean? Is it just a typo? > > > > deglitch ? > Yes, typo, I will fix it. > > > Signed-off-by: Gene Chen <gene_chen@richtek.com> > > > Reviewed-by: Guenter Roeck <linux@roeck-us.net> > > > --- > > > drivers/usb/typec/tcpm/tcpci_rt1711h.c | 15 ++++++++++++++- > > > 1 file changed, 14 insertions(+), 1 deletion(-) > > > > > > diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c > > > index df7bfe299987..33d8ea95b7c1 100644 > > > --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c > > > +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c > > > @@ -20,6 +20,9 @@ > > > #define RT1711H_VID 0x29CF > > > #define RT1711H_PID 0x1711 > > > > > > +#define RT1711H_PHYCTRL1 0x80 > > > +#define RT1711H_PHYCTRL2 0x81 > > > + > > > #define RT1711H_RTCTRL8 0x9B > > > > > > /* Autoidle timeout = (tout * 2 + 1) * 6.4ms */ > > > @@ -107,8 +110,18 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata) > > > return ret; > > > > > > /* dcSRC.DRP : 33% */ > > > - return rt1711h_write16(chip, RT1711H_RTCTRL16, 330); > > > + ret = rt1711h_write16(chip, RT1711H_RTCTRL16, 330); > > > + if (ret < 0) > > > + return ret; > > > + > > > + /* Enable phy discard retry, retry count 7, rx filter deglitech 100 us */ > > > + ret = rt1711h_write8(chip, RT1711H_PHYCTRL1, 0xF1); > > > + if (ret < 0) > > > + return ret; > > > > > > + /* Decrease wait time of BMC-encoded 1 bit from 2.67us to 2.55us */ > > > + /* wait time : (val * .4167) us */ > > > + return rt1711h_write8(chip, RT1711H_PHYCTRL2, 62); > > > } > > > > > > static int rt1711h_set_vbus(struct tcpci *tcpci, struct tcpci_data *tdata, > > > -- > > > 2.25.1 > > > > thanks, > > > > -- > > heikki