Hi Christopher,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.16-rc5 next-20180315]
[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/Eddie-James/hwmon-ucd9000-Add-gpio-and-debugfs-interfaces/20180316-125048
config: x86_64-randconfig-x019-201810 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

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

>> drivers/hwmon/pmbus/ucd9000.c:69:19: error: field 'gpio' has incomplete type
     struct gpio_chip gpio;
                      ^~~~
   drivers/hwmon/pmbus/ucd9000.c: In function 'ucd9000_gpio_get':
>> drivers/hwmon/pmbus/ucd9000.c:184:31: error: implicit declaration of 
>> function 'gpiochip_get_data'; did you mean 'gpio_get_value'? 
>> [-Werror=implicit-function-declaration]
     struct i2c_client *client  = gpiochip_get_data(gc);
                                  ^~~~~~~~~~~~~~~~~
                                  gpio_get_value
>> drivers/hwmon/pmbus/ucd9000.c:184:31: warning: initialization makes pointer 
>> from integer without a cast [-Wint-conversion]
   drivers/hwmon/pmbus/ucd9000.c: In function 'ucd9000_gpio_set':
   drivers/hwmon/pmbus/ucd9000.c:197:30: warning: initialization makes pointer 
from integer without a cast [-Wint-conversion]
     struct i2c_client *client = gpiochip_get_data(gc);
                                 ^~~~~~~~~~~~~~~~~
   drivers/hwmon/pmbus/ucd9000.c: In function 'ucd9000_gpio_get_direction':
   drivers/hwmon/pmbus/ucd9000.c:240:30: warning: initialization makes pointer 
from integer without a cast [-Wint-conversion]
     struct i2c_client *client = gpiochip_get_data(gc);
                                 ^~~~~~~~~~~~~~~~~
   drivers/hwmon/pmbus/ucd9000.c: In function 'ucd9000_gpio_set_direction':
   drivers/hwmon/pmbus/ucd9000.c:254:30: warning: initialization makes pointer 
from integer without a cast [-Wint-conversion]
     struct i2c_client *client = gpiochip_get_data(gc);
                                 ^~~~~~~~~~~~~~~~~
   drivers/hwmon/pmbus/ucd9000.c: In function 'ucd9000_probe':
>> drivers/hwmon/pmbus/ucd9000.c:460:9: error: implicit declaration of function 
>> 'devm_gpiochip_add_data'; did you mean 'devm_gpio_request'? 
>> [-Werror=implicit-function-declaration]
      ret = devm_gpiochip_add_data(&client->dev, &data->gpio,
            ^~~~~~~~~~~~~~~~~~~~~~
            devm_gpio_request
   cc1: some warnings being treated as errors

vim +/gpio +69 drivers/hwmon/pmbus/ucd9000.c

    65  
    66  struct ucd9000_data {
    67          u8 fan_data[UCD9000_NUM_FAN][I2C_SMBUS_BLOCK_MAX];
    68          struct pmbus_driver_info info;
  > 69          struct gpio_chip gpio;
    70  };
    71  #define to_ucd9000_data(_info) container_of(_info, struct ucd9000_data, 
info)
    72  
    73  static int ucd9000_get_fan_config(struct i2c_client *client, int fan)
    74  {
    75          int fan_config = 0;
    76          struct ucd9000_data *data
    77            = to_ucd9000_data(pmbus_get_driver_info(client));
    78  
    79          if (data->fan_data[fan][3] & 1)
    80                  fan_config |= PB_FAN_2_INSTALLED;   /* Use lower bit 
position */
    81  
    82          /* Pulses/revolution */
    83          fan_config |= (data->fan_data[fan][3] & 0x06) >> 1;
    84  
    85          return fan_config;
    86  }
    87  
    88  static int ucd9000_read_byte_data(struct i2c_client *client, int page, 
int reg)
    89  {
    90          int ret = 0;
    91          int fan_config;
    92  
    93          switch (reg) {
    94          case PMBUS_FAN_CONFIG_12:
    95                  if (page > 0)
    96                          return -ENXIO;
    97  
    98                  ret = ucd9000_get_fan_config(client, 0);
    99                  if (ret < 0)
   100                          return ret;
   101                  fan_config = ret << 4;
   102                  ret = ucd9000_get_fan_config(client, 1);
   103                  if (ret < 0)
   104                          return ret;
   105                  fan_config |= ret;
   106                  ret = fan_config;
   107                  break;
   108          case PMBUS_FAN_CONFIG_34:
   109                  if (page > 0)
   110                          return -ENXIO;
   111  
   112                  ret = ucd9000_get_fan_config(client, 2);
   113                  if (ret < 0)
   114                          return ret;
   115                  fan_config = ret << 4;
   116                  ret = ucd9000_get_fan_config(client, 3);
   117                  if (ret < 0)
   118                          return ret;
   119                  fan_config |= ret;
   120                  ret = fan_config;
   121                  break;
   122          default:
   123                  ret = -ENODATA;
   124                  break;
   125          }
   126          return ret;
   127  }
   128  
   129  static const struct i2c_device_id ucd9000_id[] = {
   130          {"ucd9000", ucd9000},
   131          {"ucd90120", ucd90120},
   132          {"ucd90124", ucd90124},
   133          {"ucd90160", ucd90160},
   134          {"ucd9090", ucd9090},
   135          {"ucd90910", ucd90910},
   136          {}
   137  };
   138  MODULE_DEVICE_TABLE(i2c, ucd9000_id);
   139  
   140  static const struct of_device_id ucd9000_of_match[] = {
   141          {
   142                  .compatible = "ti,ucd9000",
   143                  .data = (void *)ucd9000
   144          },
   145          {
   146                  .compatible = "ti,ucd90120",
   147                  .data = (void *)ucd90120
   148          },
   149          {
   150                  .compatible = "ti,ucd90124",
   151                  .data = (void *)ucd90124
   152          },
   153          {
   154                  .compatible = "ti,ucd90160",
   155                  .data = (void *)ucd90160
   156          },
   157          {
   158                  .compatible = "ti,ucd9090",
   159                  .data = (void *)ucd9090
   160          },
   161          {
   162                  .compatible = "ti,ucd90910",
   163                  .data = (void *)ucd90910
   164          },
   165          { },
   166  };
   167  MODULE_DEVICE_TABLE(of, ucd9000_of_match);
   168  
   169  static int ucd9000_gpio_read_config(struct i2c_client *client,
   170                                      unsigned int offset)
   171  {
   172          int ret;
   173  
   174          /* No page set required */
   175          ret = i2c_smbus_write_byte_data(client, UCD9000_GPIO_SELECT, 
offset);
   176          if (ret < 0)
   177                  return ret;
   178  
   179          return i2c_smbus_read_byte_data(client, UCD9000_GPIO_CONFIG);
   180  }
   181  
   182  static int ucd9000_gpio_get(struct gpio_chip *gc, unsigned int offset)
   183  {
 > 184          struct i2c_client *client  = gpiochip_get_data(gc);
   185          int ret;
   186  
   187          ret = ucd9000_gpio_read_config(client, offset);
   188          if (ret < 0)
   189                  return ret;
   190  
   191          return !!(ret & UCD9000_GPIO_CONFIG_STATUS);
   192  }
   193  
   194  static void ucd9000_gpio_set(struct gpio_chip *gc, unsigned int offset,
   195                               int value)
   196  {
   197          struct i2c_client *client = gpiochip_get_data(gc);
   198          int ret;
   199  
   200          ret = ucd9000_gpio_read_config(client, offset);
   201          if (ret < 0) {
   202                  dev_dbg(&client->dev, "failed to read GPIO %d config: 
%d\n",
   203                          offset, ret);
   204                  return;
   205          }
   206  
   207          if (value) {
   208                  if (ret & UCD9000_GPIO_CONFIG_STATUS)
   209                          return;
   210  
   211                  ret |= UCD9000_GPIO_CONFIG_STATUS;
   212          } else {
   213                  if (!(ret & UCD9000_GPIO_CONFIG_STATUS))
   214                          return;
   215  
   216                  ret &= ~UCD9000_GPIO_CONFIG_STATUS;
   217          }
   218  
   219          ret |= UCD9000_GPIO_CONFIG_ENABLE;
   220  
   221          /* Page set not required */
   222          ret = i2c_smbus_write_byte_data(client, UCD9000_GPIO_CONFIG, 
ret);
   223          if (ret < 0) {
   224                  dev_dbg(&client->dev, "Failed to write GPIO %d config: 
%d\n",
   225                          offset, ret);
   226                  return;
   227          }
   228  
   229          ret &= ~UCD9000_GPIO_CONFIG_ENABLE;
   230  
   231          ret = i2c_smbus_write_byte_data(client, UCD9000_GPIO_CONFIG, 
ret);
   232          if (ret < 0)
   233                  dev_dbg(&client->dev, "Failed to write GPIO %d config: 
%d\n",
   234                          offset, ret);
   235  }
   236  
   237  static int ucd9000_gpio_get_direction(struct gpio_chip *gc,
   238                                        unsigned int offset)
   239  {
 > 240          struct i2c_client *client = gpiochip_get_data(gc);
   241          int ret;
   242  
   243          ret = ucd9000_gpio_read_config(client, offset);
   244          if (ret < 0)
   245                  return ret;
   246  
   247          return !(ret & UCD9000_GPIO_CONFIG_OUT_ENABLE);
   248  }
   249  

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

Attachment: .config.gz
Description: application/gzip

Reply via email to