lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 22 Jan 2019 08:05:33 +0800
From:   kbuild test robot <lkp@...el.com>
To:     Vijai Kumar K <vijaikumar.kanagarajan@...il.com>
Cc:     kbuild-all@...org, linux-kernel@...r.kernel.org,
        cw00.choi@...sung.com, myungjoo.ham@...sung.com,
        Vijai Kumar K <vijaikumar.kanagarajan@...il.com>
Subject: Re: [PATCH] drivers: extcon: Add support for ptn5150

Hi Vijai,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on chanwoo-extcon/extcon-next]
[also build test ERROR on v5.0-rc2]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Vijai-Kumar-K/drivers-extcon-Add-support-for-ptn5150/20190122-041153
base:   https://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/extcon.git extcon-next
config: sh-allyesconfig (attached as .config)
compiler: sh4-linux-gnu-gcc (Debian 8.2.0-11) 8.2.0
reproduce:
        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
        GCC_VERSION=8.2.0 make.cross ARCH=sh 

All error/warnings (new ones prefixed by >>):

   drivers//extcon/extcon-ptn5150.c: In function 'ptn5150_irq_work':
>> drivers//extcon/extcon-ptn5150.c:93:5: error: implicit declaration of function 'extcon_set_state_sync'; did you mean 'extcon_get_state'? [-Werror=implicit-function-declaration]
        extcon_set_state_sync(info->edev,
        ^~~~~~~~~~~~~~~~~~~~~
        extcon_get_state
   drivers//extcon/extcon-ptn5150.c: In function 'ptn5150_i2c_probe':
>> drivers//extcon/extcon-ptn5150.c:255:15: error: implicit declaration of function 'devm_extcon_dev_allocate'; did you mean 'extcon_get_state'? [-Werror=implicit-function-declaration]
     info->edev = devm_extcon_dev_allocate(info->dev, ptn5150_extcon_cable);
                  ^~~~~~~~~~~~~~~~~~~~~~~~
                  extcon_get_state
>> drivers//extcon/extcon-ptn5150.c:255:13: warning: assignment to 'struct extcon_dev *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     info->edev = devm_extcon_dev_allocate(info->dev, ptn5150_extcon_cable);
                ^
>> drivers//extcon/extcon-ptn5150.c:262:8: error: implicit declaration of function 'devm_extcon_dev_register'; did you mean 'devm_pinctrl_register'? [-Werror=implicit-function-declaration]
     ret = devm_extcon_dev_register(info->dev, info->edev);
           ^~~~~~~~~~~~~~~~~~~~~~~~
           devm_pinctrl_register
   cc1: some warnings being treated as errors

vim +93 drivers//extcon/extcon-ptn5150.c

    51	
    52	static void ptn5150_irq_work(struct work_struct *work)
    53	{
    54		struct ptn5150_info *info = container_of(work,
    55				struct ptn5150_info, irq_work);
    56		int ret = 0;
    57		unsigned int reg_data;
    58		unsigned int port_status;
    59		unsigned int vbus;
    60		unsigned int cable_attach;
    61		unsigned int int_status;
    62	
    63		if (!info->edev)
    64			return;
    65	
    66		mutex_lock(&info->mutex);
    67	
    68		ret = regmap_read(info->regmap, PTN5150_REG_CC_STATUS, &reg_data);
    69		if (ret) {
    70			dev_err(info->dev,
    71				"failed to read CC STATUS %d\n", ret);
    72			mutex_unlock(&info->mutex);
    73			return;
    74		}
    75		/* Clear interrupt. Read would clear the register */
    76		ret = regmap_read(info->regmap, PTN5150_REG_INT_STATUS, &int_status);
    77		if (ret) {
    78			dev_err(info->dev,
    79				"failed to read INT STATUS %d\n", ret);
    80			mutex_unlock(&info->mutex);
    81			return;
    82		}
    83	
    84		if (int_status) {
    85			cable_attach = int_status & PTN5150_REG_INT_CABLE_ATTACH_MASK;
    86			if (cable_attach) {
    87				port_status = ((reg_data &
    88						PTN5150_REG_CC_PORT_ATTACHMENT_MASK) >>
    89						PTN5150_REG_CC_PORT_ATTACHMENT_SHIFT);
    90	
    91				switch (port_status) {
    92				case PTN5150_DFP_ATTACHED:
  > 93					extcon_set_state_sync(info->edev,
    94							      EXTCON_USB_HOST, false);
    95					gpiod_set_value(info->vbus_gpiod, 0);
    96					extcon_set_state_sync(info->edev, EXTCON_USB,
    97							      true);
    98					break;
    99				case PTN5150_UFP_ATTACHED:
   100					extcon_set_state_sync(info->edev, EXTCON_USB,
   101							      false);
   102					vbus = ((reg_data &
   103						PTN5150_REG_CC_VBUS_DETECTION_MASK) >>
   104						PTN5150_REG_CC_VBUS_DETECTION_SHIFT);
   105					if (vbus)
   106						gpiod_set_value(info->vbus_gpiod, 0);
   107					else
   108						gpiod_set_value(info->vbus_gpiod, 1);
   109	
   110					extcon_set_state_sync(info->edev,
   111							      EXTCON_USB_HOST, true);
   112					break;
   113				default:
   114					dev_err(info->dev,
   115						"Unknown Port status : %x\n",
   116						port_status);
   117					break;
   118				}
   119			} else {
   120				extcon_set_state_sync(info->edev,
   121						      EXTCON_USB_HOST, false);
   122				extcon_set_state_sync(info->edev,
   123						      EXTCON_USB, false);
   124				gpiod_set_value(info->vbus_gpiod, 0);
   125			}
   126		}
   127	
   128		/* Clear interrupt. Read would clear the register */
   129		ret = regmap_read(info->regmap, PTN5150_REG_INT_REG_STATUS,
   130					&int_status);
   131		if (ret) {
   132			dev_err(info->dev,
   133				"failed to read INT REG STATUS %d\n", ret);
   134			mutex_unlock(&info->mutex);
   135			return;
   136		}
   137	
   138	
   139		mutex_unlock(&info->mutex);
   140	}
   141	
   142	
   143	static irqreturn_t ptn5150_irq_handler(int irq, void *data)
   144	{
   145		struct ptn5150_info *info = data;
   146	
   147		schedule_work(&info->irq_work);
   148	
   149		return IRQ_HANDLED;
   150	}
   151	
   152	static int ptn5150_init_dev_type(struct ptn5150_info *info)
   153	{
   154		unsigned int reg_data, vendor_id, version_id;
   155		int ret;
   156	
   157		ret = regmap_read(info->regmap, PTN5150_REG_DEVICE_ID, &reg_data);
   158		if (ret) {
   159			dev_err(info->dev, "failed to read DEVICE_ID %d\n", ret);
   160			return -EINVAL;
   161		}
   162	
   163		vendor_id = ((reg_data & PTN5150_REG_DEVICE_ID_VENDOR_MASK) >>
   164					PTN5150_REG_DEVICE_ID_VENDOR_SHIFT);
   165		version_id = ((reg_data & PTN5150_REG_DEVICE_ID_VERSION_MASK) >>
   166					PTN5150_REG_DEVICE_ID_VERSION_SHIFT);
   167	
   168		dev_info(info->dev, "Device type: version: 0x%x, vendor: 0x%x\n",
   169				    version_id, vendor_id);
   170	
   171		/* Clear any existing interrupts */
   172		ret = regmap_read(info->regmap, PTN5150_REG_INT_STATUS, &reg_data);
   173		if (ret) {
   174			dev_err(info->dev,
   175				"failed to read PTN5150_REG_INT_STATUS %d\n",
   176				ret);
   177			return -EINVAL;
   178		}
   179	
   180		ret = regmap_read(info->regmap, PTN5150_REG_INT_REG_STATUS, &reg_data);
   181		if (ret) {
   182			dev_err(info->dev,
   183				"failed to read PTN5150_REG_INT_REG_STATUS %d\n", ret);
   184			return -EINVAL;
   185		}
   186	
   187		return 0;
   188	}
   189	
   190	static int ptn5150_i2c_probe(struct i2c_client *i2c,
   191					 const struct i2c_device_id *id)
   192	{
   193		struct device *dev = &i2c->dev;
   194		struct device_node *np = i2c->dev.of_node;
   195		struct ptn5150_info *info;
   196		int ret;
   197	
   198		if (!np)
   199			return -EINVAL;
   200	
   201		info = devm_kzalloc(&i2c->dev, sizeof(*info), GFP_KERNEL);
   202		if (!info)
   203			return -ENOMEM;
   204		i2c_set_clientdata(i2c, info);
   205	
   206		info->dev = &i2c->dev;
   207		info->i2c = i2c;
   208		info->int_gpiod = devm_gpiod_get(&i2c->dev, "int", GPIOD_IN);
   209		if (!info->int_gpiod) {
   210			dev_err(dev, "failed to get INT GPIO\n");
   211			return -EINVAL;
   212		}
   213		info->vbus_gpiod = devm_gpiod_get(&i2c->dev, "vbus", GPIOD_IN);
   214		if (!info->vbus_gpiod) {
   215			dev_err(dev, "failed to get VBUS GPIO\n");
   216			return -EINVAL;
   217		}
   218		ret = gpiod_direction_output(info->vbus_gpiod, 0);
   219		if (ret) {
   220			dev_err(dev, "failed to set VBUS GPIO direction\n");
   221			return -EINVAL;
   222		}
   223	
   224		mutex_init(&info->mutex);
   225	
   226		INIT_WORK(&info->irq_work, ptn5150_irq_work);
   227	
   228		info->regmap = devm_regmap_init_i2c(i2c, &ptn5150_regmap_config);
   229		if (IS_ERR(info->regmap)) {
   230			ret = PTR_ERR(info->regmap);
   231			dev_err(info->dev, "failed to allocate register map: %d\n",
   232					   ret);
   233			return ret;
   234		}
   235	
   236		if (info->int_gpiod) {
   237			info->irq = gpiod_to_irq(info->int_gpiod);
   238			if (info->irq < 0) {
   239				dev_err(dev, "failed to get INTB IRQ\n");
   240				return info->irq;
   241			}
   242	
   243			ret = devm_request_threaded_irq(dev, info->irq, NULL,
   244							ptn5150_irq_handler,
   245							IRQF_TRIGGER_FALLING |
   246							IRQF_ONESHOT,
   247							i2c->name, info);
   248			if (ret < 0) {
   249				dev_err(dev, "failed to request handler for INTB IRQ\n");
   250				return ret;
   251			}
   252		}
   253	
   254		/* Allocate extcon device */
 > 255		info->edev = devm_extcon_dev_allocate(info->dev, ptn5150_extcon_cable);
   256		if (IS_ERR(info->edev)) {
   257			dev_err(info->dev, "failed to allocate memory for extcon\n");
   258			return -ENOMEM;
   259		}
   260	
   261		/* Register extcon device */
 > 262		ret = devm_extcon_dev_register(info->dev, info->edev);
   263		if (ret) {
   264			dev_err(info->dev, "failed to register extcon device\n");
   265			return ret;
   266		}
   267	
   268		/* Initialize PTN5150 device and print vendor id and version id */
   269		ret = ptn5150_init_dev_type(info);
   270		if (ret)
   271			return -EINVAL;
   272	
   273		return 0;
   274	}
   275	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Download attachment ".config.gz" of type "application/gzip" (51002 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ