Re: [PATCH 1/3] usb: typec: Add QCOM PMIC typec detection driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux