@@ -36,6 +36,7 @@ static unsigned int delay = 60;
36
36
static unsigned short autoprobe_addrs [127 ] = {0xF0 , 0xF2 , 0xF4 , 0xF6 , 0xF8 };
37
37
static int autoprobe_addr_count = 5 ;
38
38
39
+ static bool module_initialized = false;
39
40
static dev_t ddcci_cdev_first ;
40
41
static dev_t ddcci_cdev_next ;
41
42
static dev_t ddcci_cdev_end ;
@@ -931,7 +932,7 @@ ATTRIBUTE_GROUPS(ddcci_char_device);
931
932
932
933
/* DDC/CI bus */
933
934
934
- static int ddcci_device_uevent (struct device * dev , struct kobj_uevent_env * env )
935
+ static int ddcci_device_uevent (CSTRUCT device * dev , struct kobj_uevent_env * env )
935
936
{
936
937
struct ddcci_device * device = to_ddcci_device (dev );
937
938
char model [ARRAY_SIZE (device -> model )];
@@ -1011,7 +1012,7 @@ static void ddcci_device_release(struct device *dev)
1011
1012
kfree (device );
1012
1013
}
1013
1014
1014
- static char * ddcci_devnode (struct device * dev ,
1015
+ static char * ddcci_devnode (CSTRUCT device * dev ,
1015
1016
umode_t * mode , kuid_t * uid , kgid_t * gid )
1016
1017
{
1017
1018
struct ddcci_device * device ;
@@ -1021,7 +1022,7 @@ static char *ddcci_devnode(struct device *dev,
1021
1022
device -> i2c_client -> adapter -> nr );
1022
1023
}
1023
1024
1024
- static char * ddcci_dependent_devnode (struct device * dev ,
1025
+ static char * ddcci_dependent_devnode (CSTRUCT device * dev ,
1025
1026
umode_t * mode , kuid_t * uid , kgid_t * gid )
1026
1027
{
1027
1028
struct ddcci_device * device ;
@@ -1065,7 +1066,7 @@ static struct device_type ddcci_dependent_type = {
1065
1066
* ddcci_verify_device - return parameter as ddcci_device, or NULL
1066
1067
* @dev: device, probably from some driver model iterator
1067
1068
*/
1068
- struct ddcci_device * ddcci_verify_device (struct device * dev )
1069
+ struct ddcci_device * ddcci_verify_device (CSTRUCT device * dev )
1069
1070
{
1070
1071
if (unlikely (!dev ))
1071
1072
return NULL ;
@@ -1100,7 +1101,7 @@ int ddcci_register_driver(struct module *owner, struct ddcci_driver *driver)
1100
1101
int ret ;
1101
1102
1102
1103
/* Can't register until after driver model init */
1103
- if (unlikely (WARN_ON (!ddcci_bus_type . p )))
1104
+ if (unlikely (WARN_ON (!smp_load_acquire ( & module_initialized ) )))
1104
1105
return - EAGAIN ;
1105
1106
1106
1107
pr_debug ("registering driver [%s]\n" , driver -> driver .name );
@@ -1672,8 +1673,14 @@ static int ddcci_detect(struct i2c_client *client, struct i2c_board_info *info)
1672
1673
}
1673
1674
1674
1675
/* I2C probe function */
1676
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION (6 , 3 , 0 )
1677
+ static int ddcci_probe (struct i2c_client * client )
1678
+ {
1679
+ const struct i2c_device_id * id = i2c_client_get_device_id (client );
1680
+ #else
1675
1681
static int ddcci_probe (struct i2c_client * client , const struct i2c_device_id * id )
1676
1682
{
1683
+ #endif
1677
1684
int i , ret = - ENODEV , tmp ;
1678
1685
unsigned char main_addr , addr ;
1679
1686
struct ddcci_bus_drv_data * drv_data ;
@@ -1858,6 +1865,7 @@ static int __init ddcci_module_init(void)
1858
1865
}
1859
1866
1860
1867
pr_debug ("ddcci driver initialized\n" );
1868
+ smp_store_release (& module_initialized , true);
1861
1869
1862
1870
return 0 ;
1863
1871
@@ -1875,6 +1883,7 @@ static int __init ddcci_module_init(void)
1875
1883
static void __exit ddcci_module_exit (void )
1876
1884
{
1877
1885
struct device * dev ;
1886
+ smp_store_release (& module_initialized , false);
1878
1887
1879
1888
while (1 ) {
1880
1889
dev = bus_find_device (& ddcci_bus_type , NULL , NULL , ddcci_remove_helper );
0 commit comments