@@ -835,6 +835,26 @@ static struct bin_attribute firmware_attr_data = {
835
835
.write = firmware_data_write ,
836
836
};
837
837
838
+ static struct attribute * fw_dev_attrs [] = {
839
+ & dev_attr_loading .attr ,
840
+ NULL
841
+ };
842
+
843
+ static struct bin_attribute * fw_dev_bin_attrs [] = {
844
+ & firmware_attr_data ,
845
+ NULL
846
+ };
847
+
848
+ static const struct attribute_group fw_dev_attr_group = {
849
+ .attrs = fw_dev_attrs ,
850
+ .bin_attrs = fw_dev_bin_attrs ,
851
+ };
852
+
853
+ static const struct attribute_group * fw_dev_attr_groups [] = {
854
+ & fw_dev_attr_group ,
855
+ NULL
856
+ };
857
+
838
858
static struct firmware_priv *
839
859
fw_create_instance (struct firmware * firmware , const char * fw_name ,
840
860
struct device * device , unsigned int opt_flags )
@@ -856,6 +876,7 @@ fw_create_instance(struct firmware *firmware, const char *fw_name,
856
876
dev_set_name (f_dev , "%s" , fw_name );
857
877
f_dev -> parent = device ;
858
878
f_dev -> class = & firmware_class ;
879
+ f_dev -> groups = fw_dev_attr_groups ;
859
880
exit :
860
881
return fw_priv ;
861
882
}
@@ -879,25 +900,10 @@ static int _request_firmware_load(struct firmware_priv *fw_priv,
879
900
goto err_put_dev ;
880
901
}
881
902
882
- retval = device_create_bin_file (f_dev , & firmware_attr_data );
883
- if (retval ) {
884
- dev_err (f_dev , "%s: sysfs_create_bin_file failed\n" , __func__ );
885
- goto err_del_dev ;
886
- }
887
-
888
903
mutex_lock (& fw_lock );
889
904
list_add (& buf -> pending_list , & pending_fw_head );
890
905
mutex_unlock (& fw_lock );
891
906
892
- retval = device_create_file (f_dev , & dev_attr_loading );
893
- if (retval ) {
894
- mutex_lock (& fw_lock );
895
- list_del_init (& buf -> pending_list );
896
- mutex_unlock (& fw_lock );
897
- dev_err (f_dev , "%s: device_create_file failed\n" , __func__ );
898
- goto err_del_bin_attr ;
899
- }
900
-
901
907
if (opt_flags & FW_OPT_UEVENT ) {
902
908
buf -> need_uevent = true;
903
909
dev_set_uevent_suppress (f_dev , false);
@@ -920,10 +926,6 @@ static int _request_firmware_load(struct firmware_priv *fw_priv,
920
926
else if (!buf -> data )
921
927
retval = - ENOMEM ;
922
928
923
- device_remove_file (f_dev , & dev_attr_loading );
924
- err_del_bin_attr :
925
- device_remove_bin_file (f_dev , & firmware_attr_data );
926
- err_del_dev :
927
929
device_del (f_dev );
928
930
err_put_dev :
929
931
put_device (f_dev );
0 commit comments