Hi Wesley, Thank you for the patch! Yet something to improve: [auto build test ERROR on usb/usb-testing] [also build test ERROR on robh/for-next v5.7 next-20200609] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Wesley-Cheng/Introduce-PMIC-based-USB-type-C-detection/20200610-050045 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing config: arm-allyesconfig (attached as .config) compiler: arm-linux-gnueabi-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arm If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@xxxxxxxxx> All error/warnings (new ones prefixed by >>, old ones prefixed by <<): >> drivers/usb/typec/qcom-pmic-typec.c:86:6: warning: no previous prototype for 'qcom_pmic_typec_bh_work' [-Wmissing-prototypes] 86 | void qcom_pmic_typec_bh_work(struct work_struct *w) | ^~~~~~~~~~~~~~~~~~~~~~~ >> drivers/usb/typec/qcom-pmic-typec.c:116:13: warning: no previous prototype for 'qcom_pmic_typec_interrupt' [-Wmissing-prototypes] 116 | irqreturn_t qcom_pmic_typec_interrupt(int irq, void *_qcom_usb) | ^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from drivers/usb/typec/qcom-pmic-typec.c:7: drivers/usb/typec/qcom-pmic-typec.c: In function 'qcom_pmic_typec_typec_hw_init': >> include/linux/build_bug.h:16:51: error: negative width in bit-field '<anonymous>' 16 | #define BUILD_BUG_ON_ZERO(e) ((int)(sizeof(struct { int:(-!!(e)); }))) | ^ include/linux/regmap.h:84:36: note: in definition of macro 'regmap_update_bits' 84 | regmap_update_bits_base(map, reg, mask, val, NULL, false, false) | ^~~~ include/linux/bits.h:25:3: note: in expansion of macro 'BUILD_BUG_ON_ZERO' 25 | (BUILD_BUG_ON_ZERO(__builtin_choose_expr( | ^~~~~~~~~~~~~~~~~ include/linux/bits.h:39:3: note: in expansion of macro 'GENMASK_INPUT_CHECK' 39 | (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l)) | ^~~~~~~~~~~~~~~~~~~ >> drivers/usb/typec/qcom-pmic-typec.c:48:34: note: in expansion of macro 'GENMASK' 48 | #define TYPEC_INTR_EN_CFG_1_MASK GENMASK(0, 7) | ^~~~~~~ >> drivers/usb/typec/qcom-pmic-typec.c:132:7: note: in expansion of macro 'TYPEC_INTR_EN_CFG_1_MASK' 132 | TYPEC_INTR_EN_CFG_1_MASK, 0); | ^~~~~~~~~~~~~~~~~~~~~~~~ vim +/qcom_pmic_typec_bh_work +86 drivers/usb/typec/qcom-pmic-typec.c 31 32 #define TYPEC_BASE 0x1500 33 #define TYPEC_MISC_STATUS (TYPEC_BASE + 0xb) 34 #define CC_ATTACHED BIT(0) 35 #define CC_ORIENTATION BIT(1) 36 #define SNK_SRC_MODE BIT(6) 37 #define TYPEC_MODE_CFG (TYPEC_BASE + 0x44) 38 #define TYPEC_DISABLE_CMD BIT(0) 39 #define EN_SNK_ONLY BIT(1) 40 #define EN_SRC_ONLY BIT(2) 41 #define EN_TRY_SNK BIT(4) 42 #define TYPEC_VCONN_CONTROL (TYPEC_BASE + 0x46) 43 #define VCONN_EN_SRC BIT(0) 44 #define VCONN_EN_VAL BIT(1) 45 #define TYPEC_EXIT_STATE_CFG (TYPEC_BASE + 0x50) 46 #define SEL_SRC_UPPER_REF BIT(2) 47 #define TYPEC_INTR_EN_CFG_1 (TYPEC_BASE + 0x5e) > 48 #define TYPEC_INTR_EN_CFG_1_MASK GENMASK(0, 7) 49 50 struct qcom_pmic_typec { 51 struct device *dev; 52 struct fwnode_handle *fwnode; 53 struct regmap *regmap; 54 struct work_struct bh_work; 55 56 struct typec_capability *cap; 57 struct typec_port *port; 58 struct usb_role_switch *role_sw; 59 60 struct regulator_desc usb_vbus_rdesc; 61 struct regulator_dev *usb_vbus_reg; 62 }; 63 64 static int qcom_pmic_typec_vbus_enable(struct qcom_pmic_typec *qcom_usb) 65 { 66 int rc; 67 68 rc = regmap_update_bits(qcom_usb->regmap, CMD_OTG, OTG_EN, OTG_EN); 69 if (rc) 70 dev_err(qcom_usb->dev, "failed to update OTG_CTL\n"); 71 72 return rc; 73 } 74 75 static int qcom_pmic_typec_vbus_disable(struct qcom_pmic_typec *qcom_usb) 76 { 77 int rc; 78 79 rc = regmap_update_bits(qcom_usb->regmap, CMD_OTG, OTG_EN, 0); 80 if (rc) 81 dev_err(qcom_usb->dev, "failed to update OTG_CTL\n"); 82 83 return rc; 84 } 85 > 86 void qcom_pmic_typec_bh_work(struct work_struct *w) 87 { 88 struct qcom_pmic_typec *qcom_usb = container_of(w, 89 struct qcom_pmic_typec, 90 bh_work); 91 enum typec_orientation orientation; 92 enum usb_role role; 93 unsigned int stat; 94 95 regmap_read(qcom_usb->regmap, TYPEC_MISC_STATUS, &stat); 96 97 if (stat & CC_ATTACHED) { 98 orientation = ((stat & CC_ORIENTATION) >> 1) ? 99 TYPEC_ORIENTATION_REVERSE : 100 TYPEC_ORIENTATION_NORMAL; 101 typec_set_orientation(qcom_usb->port, orientation); 102 103 role = (stat & SNK_SRC_MODE) ? USB_ROLE_HOST : USB_ROLE_DEVICE; 104 if (role == USB_ROLE_HOST) 105 qcom_pmic_typec_vbus_enable(qcom_usb); 106 else 107 qcom_pmic_typec_vbus_disable(qcom_usb); 108 109 usb_role_switch_set_role(qcom_usb->role_sw, role); 110 } else { 111 usb_role_switch_set_role(qcom_usb->role_sw, USB_ROLE_NONE); 112 qcom_pmic_typec_vbus_disable(qcom_usb); 113 } 114 } 115 > 116 irqreturn_t qcom_pmic_typec_interrupt(int irq, void *_qcom_usb) 117 { 118 struct qcom_pmic_typec *qcom_usb = _qcom_usb; 119 120 queue_work(system_power_efficient_wq, &qcom_usb->bh_work); 121 122 return IRQ_HANDLED; 123 } 124 125 static void qcom_pmic_typec_typec_hw_init(struct qcom_pmic_typec *qcom_usb) 126 { 127 u8 mode; 128 129 regmap_update_bits(qcom_usb->regmap, TYPE_C_CFG_REG, BC12_START_ON_CC, 130 0); 131 regmap_update_bits(qcom_usb->regmap, TYPEC_INTR_EN_CFG_1, > 132 TYPEC_INTR_EN_CFG_1_MASK, 0); 133 134 if (qcom_usb->cap->type != TYPEC_PORT_DRP) 135 mode = (qcom_usb->cap->type == TYPEC_PORT_SNK) ? 136 EN_SNK_ONLY : EN_SRC_ONLY; 137 else 138 mode = EN_TRY_SNK; 139 regmap_update_bits(qcom_usb->regmap, TYPEC_MODE_CFG, 140 EN_SNK_ONLY | EN_TRY_SNK | EN_SRC_ONLY, mode); 141 142 regmap_update_bits(qcom_usb->regmap, TYPEC_VCONN_CONTROL, 143 VCONN_EN_SRC | VCONN_EN_VAL, VCONN_EN_SRC); 144 regmap_update_bits(qcom_usb->regmap, TYPEC_VCONN_CONTROL, 145 VCONN_EN_SRC | VCONN_EN_VAL, VCONN_EN_SRC); 146 regmap_update_bits(qcom_usb->regmap, TYPEC_EXIT_STATE_CFG, 147 SEL_SRC_UPPER_REF, SEL_SRC_UPPER_REF); 148 regmap_update_bits(qcom_usb->regmap, OTG_CFG, OTG_EN_SRC_CFG, 149 OTG_EN_SRC_CFG); 150 } 151 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip