diff mbox series

[v1,1/1] usb: typec: stusb160x: Make use of i2c_get_match_data()

Message ID 20240925133952.1067949-1-andriy.shevchenko@linux.intel.com (mailing list archive)
State Superseded
Headers show
Series [v1,1/1] usb: typec: stusb160x: Make use of i2c_get_match_data() | expand

Commit Message

Andy Shevchenko Sept. 25, 2024, 1:39 p.m. UTC
Get matching data in one step by switching to use i2c_get_match_data().
As a positive side effect the matching data is qualified as a constant.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/usb/typec/stusb160x.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

Comments

kernel test robot Sept. 25, 2024, 7:22 p.m. UTC | #1
Hi Andy,

kernel test robot noticed the following build errors:

[auto build test ERROR on usb/usb-testing]
[also build test ERROR on usb/usb-next usb/usb-linus linus/master v6.11 next-20240925]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Andy-Shevchenko/usb-typec-stusb160x-Make-use-of-i2c_get_match_data/20240925-223551
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
patch link:    https://lore.kernel.org/r/20240925133952.1067949-1-andriy.shevchenko%40linux.intel.com
patch subject: [PATCH v1 1/1] usb: typec: stusb160x: Make use of i2c_get_match_data()
config: s390-allyesconfig (https://download.01.org/0day-ci/archive/20240926/202409260206.UbcSQv4S-lkp@intel.com/config)
compiler: s390-linux-gcc (GCC) 14.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240926/202409260206.UbcSQv4S-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202409260206.UbcSQv4S-lkp@intel.com/

All errors (new ones prefixed by >>):

   drivers/usb/typec/stusb160x.c: In function 'stusb160x_probe':
>> drivers/usb/typec/stusb160x.c:647:44: error: passing argument 1 of 'i2c_get_match_data' from incompatible pointer type [-Wincompatible-pointer-types]
     647 |         regmap_config = i2c_get_match_data(&client->dev);
         |                                            ^~~~~~~~~~~~
         |                                            |
         |                                            struct device *
   In file included from drivers/usb/typec/stusb160x.c:10:
   include/linux/i2c.h:360:57: note: expected 'const struct i2c_client *' but argument is of type 'struct device *'
     360 | const void *i2c_get_match_data(const struct i2c_client *client);
         |                                ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~


vim +/i2c_get_match_data +647 drivers/usb/typec/stusb160x.c

   633	
   634	static int stusb160x_probe(struct i2c_client *client)
   635	{
   636		const struct regmap_config *regmap_config;
   637		struct stusb160x *chip;
   638		struct fwnode_handle *fwnode;
   639		int ret;
   640	
   641		chip = devm_kzalloc(&client->dev, sizeof(struct stusb160x), GFP_KERNEL);
   642		if (!chip)
   643			return -ENOMEM;
   644	
   645		i2c_set_clientdata(client, chip);
   646	
 > 647		regmap_config = i2c_get_match_data(&client->dev);
   648	
   649		chip->regmap = devm_regmap_init_i2c(client, regmap_config);
   650		if (IS_ERR(chip->regmap)) {
   651			ret = PTR_ERR(chip->regmap);
   652			dev_err(&client->dev,
   653				"Failed to allocate register map:%d\n", ret);
   654			return ret;
   655		}
   656	
   657		chip->dev = &client->dev;
   658	
   659		chip->vsys_supply = devm_regulator_get_optional(chip->dev, "vsys");
   660		if (IS_ERR(chip->vsys_supply)) {
   661			ret = PTR_ERR(chip->vsys_supply);
   662			if (ret != -ENODEV)
   663				return ret;
   664			chip->vsys_supply = NULL;
   665		}
   666	
   667		chip->vdd_supply = devm_regulator_get_optional(chip->dev, "vdd");
   668		if (IS_ERR(chip->vdd_supply)) {
   669			ret = PTR_ERR(chip->vdd_supply);
   670			if (ret != -ENODEV)
   671				return ret;
   672			chip->vdd_supply = NULL;
   673		}
   674	
   675		chip->vconn_supply = devm_regulator_get_optional(chip->dev, "vconn");
   676		if (IS_ERR(chip->vconn_supply)) {
   677			ret = PTR_ERR(chip->vconn_supply);
   678			if (ret != -ENODEV)
   679				return ret;
   680			chip->vconn_supply = NULL;
   681		}
   682	
   683		fwnode = device_get_named_child_node(chip->dev, "connector");
   684		if (!fwnode)
   685			return -ENODEV;
   686	
   687		/*
   688		 * This fwnode has a "compatible" property, but is never populated as a
   689		 * struct device. Instead we simply parse it to read the properties.
   690		 * This it breaks fw_devlink=on. To maintain backward compatibility
   691		 * with existing DT files, we work around this by deleting any
   692		 * fwnode_links to/from this fwnode.
   693		 */
   694		fw_devlink_purge_absent_suppliers(fwnode);
   695	
   696		/*
   697		 * When both VDD and VSYS power supplies are present, the low power
   698		 * supply VSYS is selected when VSYS voltage is above 3.1 V.
   699		 * Otherwise VDD is selected.
   700		 */
   701		if (chip->vdd_supply &&
   702		    (!chip->vsys_supply ||
   703		     (regulator_get_voltage(chip->vsys_supply) <= 3100000)))
   704			chip->main_supply = chip->vdd_supply;
   705		else
   706			chip->main_supply = chip->vsys_supply;
   707	
   708		if (chip->main_supply) {
   709			ret = regulator_enable(chip->main_supply);
   710			if (ret) {
   711				dev_err(chip->dev,
   712					"Failed to enable main supply: %d\n", ret);
   713				goto fwnode_put;
   714			}
   715		}
   716	
   717		/* Get configuration from chip */
   718		ret = stusb160x_get_caps(chip);
   719		if (ret) {
   720			dev_err(chip->dev, "Failed to get port caps: %d\n", ret);
   721			goto main_reg_disable;
   722		}
   723	
   724		/* Get optional re-configuration from device tree */
   725		ret = stusb160x_get_fw_caps(chip, fwnode);
   726		if (ret) {
   727			dev_err(chip->dev, "Failed to get connector caps: %d\n", ret);
   728			goto main_reg_disable;
   729		}
   730	
   731		ret = stusb160x_chip_init(chip);
   732		if (ret) {
   733			dev_err(chip->dev, "Failed to init port: %d\n", ret);
   734			goto main_reg_disable;
   735		}
   736	
   737		chip->port = typec_register_port(chip->dev, &chip->capability);
   738		if (IS_ERR(chip->port)) {
   739			ret = PTR_ERR(chip->port);
   740			goto all_reg_disable;
   741		}
   742	
   743		/*
   744		 * Default power operation mode initialization: will be updated upon
   745		 * attach/detach interrupt
   746		 */
   747		typec_set_pwr_opmode(chip->port, chip->pwr_opmode);
   748	
   749		if (client->irq) {
   750			chip->role_sw = fwnode_usb_role_switch_get(fwnode);
   751			if (IS_ERR(chip->role_sw)) {
   752				ret = dev_err_probe(chip->dev, PTR_ERR(chip->role_sw),
   753						    "Failed to get usb role switch\n");
   754				goto port_unregister;
   755			}
   756	
   757			ret = stusb160x_irq_init(chip, client->irq);
   758			if (ret)
   759				goto role_sw_put;
   760		} else {
   761			/*
   762			 * If Source or Dual power role, need to enable VDD supply
   763			 * providing Vbus if present. In case of interrupt support,
   764			 * VDD supply will be dynamically managed upon attach/detach
   765			 * interrupt.
   766			 */
   767			if (chip->port_type != TYPEC_PORT_SNK && chip->vdd_supply) {
   768				ret = regulator_enable(chip->vdd_supply);
   769				if (ret) {
   770					dev_err(chip->dev,
   771						"Failed to enable VDD supply: %d\n",
   772						ret);
   773					goto port_unregister;
   774				}
   775				chip->vbus_on = true;
   776			}
   777		}
   778	
   779		fwnode_handle_put(fwnode);
   780	
   781		return 0;
   782	
   783	role_sw_put:
   784		if (chip->role_sw)
   785			usb_role_switch_put(chip->role_sw);
   786	port_unregister:
   787		typec_unregister_port(chip->port);
   788	all_reg_disable:
   789		if (stusb160x_get_vconn(chip))
   790			stusb160x_set_vconn(chip, false);
   791	main_reg_disable:
   792		if (chip->main_supply)
   793			regulator_disable(chip->main_supply);
   794	fwnode_put:
   795		fwnode_handle_put(fwnode);
   796	
   797		return ret;
   798	}
   799
kernel test robot Sept. 25, 2024, 7:53 p.m. UTC | #2
Hi Andy,

kernel test robot noticed the following build errors:

[auto build test ERROR on usb/usb-testing]
[also build test ERROR on usb/usb-next usb/usb-linus linus/master v6.11 next-20240925]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Andy-Shevchenko/usb-typec-stusb160x-Make-use-of-i2c_get_match_data/20240925-223551
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
patch link:    https://lore.kernel.org/r/20240925133952.1067949-1-andriy.shevchenko%40linux.intel.com
patch subject: [PATCH v1 1/1] usb: typec: stusb160x: Make use of i2c_get_match_data()
config: s390-allmodconfig (https://download.01.org/0day-ci/archive/20240926/202409260316.cTVWA6xM-lkp@intel.com/config)
compiler: clang version 20.0.0git (https://github.com/llvm/llvm-project 7773243d9916f98ba0ffce0c3a960e4aa9f03e81)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240926/202409260316.cTVWA6xM-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202409260316.cTVWA6xM-lkp@intel.com/

All errors (new ones prefixed by >>):

   In file included from drivers/usb/typec/stusb160x.c:10:
   In file included from include/linux/i2c.h:13:
   In file included from include/linux/acpi.h:14:
   In file included from include/linux/device.h:32:
   In file included from include/linux/device/driver.h:21:
   In file included from include/linux/module.h:19:
   In file included from include/linux/elf.h:6:
   In file included from arch/s390/include/asm/elf.h:181:
   In file included from arch/s390/include/asm/mmu_context.h:11:
   In file included from arch/s390/include/asm/pgalloc.h:18:
   In file included from include/linux/mm.h:2232:
   include/linux/vmstat.h:503:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     503 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     504 |                            item];
         |                            ~~~~
   include/linux/vmstat.h:510:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     510 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     511 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:517:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
     517 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
   include/linux/vmstat.h:523:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     523 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     524 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/usb/typec/stusb160x.c:14:
   In file included from include/linux/regmap.h:20:
   In file included from include/linux/iopoll.h:14:
   In file included from include/linux/io.h:14:
   In file included from arch/s390/include/asm/io.h:93:
   include/asm-generic/io.h:548:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     548 |         val = __raw_readb(PCI_IOBASE + addr);
         |                           ~~~~~~~~~~ ^
   include/asm-generic/io.h:561:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     561 |         val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
         |                                                         ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:37:59: note: expanded from macro '__le16_to_cpu'
      37 | #define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x))
         |                                                           ^
   include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16'
     102 | #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
         |                                                      ^
   In file included from drivers/usb/typec/stusb160x.c:14:
   In file included from include/linux/regmap.h:20:
   In file included from include/linux/iopoll.h:14:
   In file included from include/linux/io.h:14:
   In file included from arch/s390/include/asm/io.h:93:
   include/asm-generic/io.h:574:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     574 |         val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
         |                                                         ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:35:59: note: expanded from macro '__le32_to_cpu'
      35 | #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
         |                                                           ^
   include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32'
     115 | #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
         |                                                      ^
   In file included from drivers/usb/typec/stusb160x.c:14:
   In file included from include/linux/regmap.h:20:
   In file included from include/linux/iopoll.h:14:
   In file included from include/linux/io.h:14:
   In file included from arch/s390/include/asm/io.h:93:
   include/asm-generic/io.h:585:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     585 |         __raw_writeb(value, PCI_IOBASE + addr);
         |                             ~~~~~~~~~~ ^
   include/asm-generic/io.h:595:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     595 |         __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
         |                                                       ~~~~~~~~~~ ^
   include/asm-generic/io.h:605:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     605 |         __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
         |                                                       ~~~~~~~~~~ ^
   include/asm-generic/io.h:693:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     693 |         readsb(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:701:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     701 |         readsw(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:709:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     709 |         readsl(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:718:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     718 |         writesb(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
   include/asm-generic/io.h:727:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     727 |         writesw(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
   include/asm-generic/io.h:736:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     736 |         writesl(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
>> drivers/usb/typec/stusb160x.c:647:37: error: incompatible pointer types passing 'struct device *' to parameter of type 'const struct i2c_client *' [-Werror,-Wincompatible-pointer-types]
     647 |         regmap_config = i2c_get_match_data(&client->dev);
         |                                            ^~~~~~~~~~~~
   include/linux/i2c.h:360:57: note: passing argument to parameter 'client' here
     360 | const void *i2c_get_match_data(const struct i2c_client *client);
         |                                                         ^
   16 warnings and 1 error generated.


vim +647 drivers/usb/typec/stusb160x.c

   633	
   634	static int stusb160x_probe(struct i2c_client *client)
   635	{
   636		const struct regmap_config *regmap_config;
   637		struct stusb160x *chip;
   638		struct fwnode_handle *fwnode;
   639		int ret;
   640	
   641		chip = devm_kzalloc(&client->dev, sizeof(struct stusb160x), GFP_KERNEL);
   642		if (!chip)
   643			return -ENOMEM;
   644	
   645		i2c_set_clientdata(client, chip);
   646	
 > 647		regmap_config = i2c_get_match_data(&client->dev);
   648	
   649		chip->regmap = devm_regmap_init_i2c(client, regmap_config);
   650		if (IS_ERR(chip->regmap)) {
   651			ret = PTR_ERR(chip->regmap);
   652			dev_err(&client->dev,
   653				"Failed to allocate register map:%d\n", ret);
   654			return ret;
   655		}
   656	
   657		chip->dev = &client->dev;
   658	
   659		chip->vsys_supply = devm_regulator_get_optional(chip->dev, "vsys");
   660		if (IS_ERR(chip->vsys_supply)) {
   661			ret = PTR_ERR(chip->vsys_supply);
   662			if (ret != -ENODEV)
   663				return ret;
   664			chip->vsys_supply = NULL;
   665		}
   666	
   667		chip->vdd_supply = devm_regulator_get_optional(chip->dev, "vdd");
   668		if (IS_ERR(chip->vdd_supply)) {
   669			ret = PTR_ERR(chip->vdd_supply);
   670			if (ret != -ENODEV)
   671				return ret;
   672			chip->vdd_supply = NULL;
   673		}
   674	
   675		chip->vconn_supply = devm_regulator_get_optional(chip->dev, "vconn");
   676		if (IS_ERR(chip->vconn_supply)) {
   677			ret = PTR_ERR(chip->vconn_supply);
   678			if (ret != -ENODEV)
   679				return ret;
   680			chip->vconn_supply = NULL;
   681		}
   682	
   683		fwnode = device_get_named_child_node(chip->dev, "connector");
   684		if (!fwnode)
   685			return -ENODEV;
   686	
   687		/*
   688		 * This fwnode has a "compatible" property, but is never populated as a
   689		 * struct device. Instead we simply parse it to read the properties.
   690		 * This it breaks fw_devlink=on. To maintain backward compatibility
   691		 * with existing DT files, we work around this by deleting any
   692		 * fwnode_links to/from this fwnode.
   693		 */
   694		fw_devlink_purge_absent_suppliers(fwnode);
   695	
   696		/*
   697		 * When both VDD and VSYS power supplies are present, the low power
   698		 * supply VSYS is selected when VSYS voltage is above 3.1 V.
   699		 * Otherwise VDD is selected.
   700		 */
   701		if (chip->vdd_supply &&
   702		    (!chip->vsys_supply ||
   703		     (regulator_get_voltage(chip->vsys_supply) <= 3100000)))
   704			chip->main_supply = chip->vdd_supply;
   705		else
   706			chip->main_supply = chip->vsys_supply;
   707	
   708		if (chip->main_supply) {
   709			ret = regulator_enable(chip->main_supply);
   710			if (ret) {
   711				dev_err(chip->dev,
   712					"Failed to enable main supply: %d\n", ret);
   713				goto fwnode_put;
   714			}
   715		}
   716	
   717		/* Get configuration from chip */
   718		ret = stusb160x_get_caps(chip);
   719		if (ret) {
   720			dev_err(chip->dev, "Failed to get port caps: %d\n", ret);
   721			goto main_reg_disable;
   722		}
   723	
   724		/* Get optional re-configuration from device tree */
   725		ret = stusb160x_get_fw_caps(chip, fwnode);
   726		if (ret) {
   727			dev_err(chip->dev, "Failed to get connector caps: %d\n", ret);
   728			goto main_reg_disable;
   729		}
   730	
   731		ret = stusb160x_chip_init(chip);
   732		if (ret) {
   733			dev_err(chip->dev, "Failed to init port: %d\n", ret);
   734			goto main_reg_disable;
   735		}
   736	
   737		chip->port = typec_register_port(chip->dev, &chip->capability);
   738		if (IS_ERR(chip->port)) {
   739			ret = PTR_ERR(chip->port);
   740			goto all_reg_disable;
   741		}
   742	
   743		/*
   744		 * Default power operation mode initialization: will be updated upon
   745		 * attach/detach interrupt
   746		 */
   747		typec_set_pwr_opmode(chip->port, chip->pwr_opmode);
   748	
   749		if (client->irq) {
   750			chip->role_sw = fwnode_usb_role_switch_get(fwnode);
   751			if (IS_ERR(chip->role_sw)) {
   752				ret = dev_err_probe(chip->dev, PTR_ERR(chip->role_sw),
   753						    "Failed to get usb role switch\n");
   754				goto port_unregister;
   755			}
   756	
   757			ret = stusb160x_irq_init(chip, client->irq);
   758			if (ret)
   759				goto role_sw_put;
   760		} else {
   761			/*
   762			 * If Source or Dual power role, need to enable VDD supply
   763			 * providing Vbus if present. In case of interrupt support,
   764			 * VDD supply will be dynamically managed upon attach/detach
   765			 * interrupt.
   766			 */
   767			if (chip->port_type != TYPEC_PORT_SNK && chip->vdd_supply) {
   768				ret = regulator_enable(chip->vdd_supply);
   769				if (ret) {
   770					dev_err(chip->dev,
   771						"Failed to enable VDD supply: %d\n",
   772						ret);
   773					goto port_unregister;
   774				}
   775				chip->vbus_on = true;
   776			}
   777		}
   778	
   779		fwnode_handle_put(fwnode);
   780	
   781		return 0;
   782	
   783	role_sw_put:
   784		if (chip->role_sw)
   785			usb_role_switch_put(chip->role_sw);
   786	port_unregister:
   787		typec_unregister_port(chip->port);
   788	all_reg_disable:
   789		if (stusb160x_get_vconn(chip))
   790			stusb160x_set_vconn(chip, false);
   791	main_reg_disable:
   792		if (chip->main_supply)
   793			regulator_disable(chip->main_supply);
   794	fwnode_put:
   795		fwnode_handle_put(fwnode);
   796	
   797		return ret;
   798	}
   799
diff mbox series

Patch

diff --git a/drivers/usb/typec/stusb160x.c b/drivers/usb/typec/stusb160x.c
index f3140fc04c12..9ed1fc668a3f 100644
--- a/drivers/usb/typec/stusb160x.c
+++ b/drivers/usb/typec/stusb160x.c
@@ -633,9 +633,8 @@  MODULE_DEVICE_TABLE(of, stusb160x_of_match);
 
 static int stusb160x_probe(struct i2c_client *client)
 {
+	const struct regmap_config *regmap_config;
 	struct stusb160x *chip;
-	const struct of_device_id *match;
-	struct regmap_config *regmap_config;
 	struct fwnode_handle *fwnode;
 	int ret;
 
@@ -645,8 +644,8 @@  static int stusb160x_probe(struct i2c_client *client)
 
 	i2c_set_clientdata(client, chip);
 
-	match = i2c_of_match_device(stusb160x_of_match, client);
-	regmap_config = (struct regmap_config *)match->data;
+	regmap_config = i2c_get_match_data(&client->dev);
+
 	chip->regmap = devm_regmap_init_i2c(client, regmap_config);
 	if (IS_ERR(chip->regmap)) {
 		ret = PTR_ERR(chip->regmap);