@@ -126,6 +126,7 @@ module_param(init, int, 0444);
126
126
struct amc6821_data {
127
127
struct regmap * regmap ;
128
128
struct mutex update_lock ;
129
+ enum pwm_polarity pwm_polarity ;
129
130
};
130
131
131
132
/*
@@ -848,11 +849,11 @@ static int amc6821_detect(struct i2c_client *client, struct i2c_board_info *info
848
849
return 0 ;
849
850
}
850
851
851
- static enum pwm_polarity amc6821_pwm_polarity (struct i2c_client * client )
852
+ static enum pwm_polarity amc6821_pwm_polarity (struct i2c_client * client ,
853
+ struct device_node * fan_np )
852
854
{
853
855
enum pwm_polarity polarity = PWM_POLARITY_NORMAL ;
854
856
struct of_phandle_args args ;
855
- struct device_node * fan_np ;
856
857
857
858
/*
858
859
* For backward compatibility, the pwminv module parameter takes
@@ -863,10 +864,6 @@ static enum pwm_polarity amc6821_pwm_polarity(struct i2c_client *client)
863
864
if (pwminv > 0 )
864
865
return PWM_POLARITY_INVERSED ;
865
866
866
- fan_np = of_get_child_by_name (client -> dev .of_node , "fan" );
867
- if (!fan_np )
868
- return PWM_POLARITY_NORMAL ;
869
-
870
867
if (of_parse_phandle_with_args (fan_np , "pwms" , "#pwm-cells" , 0 , & args ))
871
868
goto out ;
872
869
of_node_put (args .np );
@@ -877,10 +874,16 @@ static enum pwm_polarity amc6821_pwm_polarity(struct i2c_client *client)
877
874
if (args .args [1 ] & PWM_POLARITY_INVERTED )
878
875
polarity = PWM_POLARITY_INVERSED ;
879
876
out :
880
- of_node_put (fan_np );
881
877
return polarity ;
882
878
}
883
879
880
+ static void amc6821_of_fan_read_data (struct i2c_client * client ,
881
+ struct amc6821_data * data ,
882
+ struct device_node * fan_np )
883
+ {
884
+ data -> pwm_polarity = amc6821_pwm_polarity (client , fan_np );
885
+ }
886
+
884
887
static int amc6821_init_client (struct i2c_client * client , struct amc6821_data * data )
885
888
{
886
889
struct regmap * regmap = data -> regmap ;
@@ -902,7 +905,7 @@ static int amc6821_init_client(struct i2c_client *client, struct amc6821_data *d
902
905
return err ;
903
906
904
907
regval = AMC6821_CONF1_START ;
905
- if (amc6821_pwm_polarity ( client ) == PWM_POLARITY_INVERSED )
908
+ if (data -> pwm_polarity == PWM_POLARITY_INVERSED )
906
909
regval |= AMC6821_CONF1_PWMINV ;
907
910
908
911
err = regmap_update_bits (regmap , AMC6821_REG_CONF1 ,
@@ -944,6 +947,7 @@ static int amc6821_probe(struct i2c_client *client)
944
947
struct amc6821_data * data ;
945
948
struct device * hwmon_dev ;
946
949
struct regmap * regmap ;
950
+ struct device_node * fan_np __free (device_node ) = NULL ;
947
951
int err ;
948
952
949
953
data = devm_kzalloc (dev , sizeof (struct amc6821_data ), GFP_KERNEL );
@@ -956,6 +960,10 @@ static int amc6821_probe(struct i2c_client *client)
956
960
"Failed to initialize regmap\n" );
957
961
data -> regmap = regmap ;
958
962
963
+ fan_np = of_get_child_by_name (dev -> of_node , "fan" );
964
+ if (fan_np )
965
+ amc6821_of_fan_read_data (client , data , fan_np );
966
+
959
967
err = amc6821_init_client (client , data );
960
968
if (err )
961
969
return err ;
0 commit comments