diff options
author | Christoph Hellwig <hch@lst.de> | 2015-10-03 09:32:44 -0400 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2015-10-14 01:14:40 -0400 |
commit | 3755a273db8f523f8be6c18df9e1506faa93c664 (patch) | |
tree | 080866d14b56ee8a3e1dff7b3c66c37537780075 | |
parent | 75ab2256a7d05128f8aa088cdde961d8029bcd55 (diff) |
usb-gadget/f_midi: use per-attribute show and store methods
To simplify the configfs interface and remove boilerplate code that also
causes binary bloat.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
Acked-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
-rw-r--r-- | drivers/usb/gadget/function/f_midi.c | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c index a287a4829273..0e2b8eda254e 100644 --- a/drivers/usb/gadget/function/f_midi.c +++ b/drivers/usb/gadget/function/f_midi.c | |||
@@ -906,9 +906,6 @@ static inline struct f_midi_opts *to_f_midi_opts(struct config_item *item) | |||
906 | func_inst.group); | 906 | func_inst.group); |
907 | } | 907 | } |
908 | 908 | ||
909 | CONFIGFS_ATTR_STRUCT(f_midi_opts); | ||
910 | CONFIGFS_ATTR_OPS(f_midi_opts); | ||
911 | |||
912 | static void midi_attr_release(struct config_item *item) | 909 | static void midi_attr_release(struct config_item *item) |
913 | { | 910 | { |
914 | struct f_midi_opts *opts = to_f_midi_opts(item); | 911 | struct f_midi_opts *opts = to_f_midi_opts(item); |
@@ -918,13 +915,12 @@ static void midi_attr_release(struct config_item *item) | |||
918 | 915 | ||
919 | static struct configfs_item_operations midi_item_ops = { | 916 | static struct configfs_item_operations midi_item_ops = { |
920 | .release = midi_attr_release, | 917 | .release = midi_attr_release, |
921 | .show_attribute = f_midi_opts_attr_show, | ||
922 | .store_attribute = f_midi_opts_attr_store, | ||
923 | }; | 918 | }; |
924 | 919 | ||
925 | #define F_MIDI_OPT(name, test_limit, limit) \ | 920 | #define F_MIDI_OPT(name, test_limit, limit) \ |
926 | static ssize_t f_midi_opts_##name##_show(struct f_midi_opts *opts, char *page) \ | 921 | static ssize_t f_midi_opts_##name##_show(struct config_item *item, char *page) \ |
927 | { \ | 922 | { \ |
923 | struct f_midi_opts *opts = to_f_midi_opts(item); \ | ||
928 | int result; \ | 924 | int result; \ |
929 | \ | 925 | \ |
930 | mutex_lock(&opts->lock); \ | 926 | mutex_lock(&opts->lock); \ |
@@ -934,9 +930,10 @@ static ssize_t f_midi_opts_##name##_show(struct f_midi_opts *opts, char *page) \ | |||
934 | return result; \ | 930 | return result; \ |
935 | } \ | 931 | } \ |
936 | \ | 932 | \ |
937 | static ssize_t f_midi_opts_##name##_store(struct f_midi_opts *opts, \ | 933 | static ssize_t f_midi_opts_##name##_store(struct config_item *item, \ |
938 | const char *page, size_t len) \ | 934 | const char *page, size_t len) \ |
939 | { \ | 935 | { \ |
936 | struct f_midi_opts *opts = to_f_midi_opts(item); \ | ||
940 | int ret; \ | 937 | int ret; \ |
941 | u32 num; \ | 938 | u32 num; \ |
942 | \ | 939 | \ |
@@ -962,9 +959,7 @@ end: \ | |||
962 | return ret; \ | 959 | return ret; \ |
963 | } \ | 960 | } \ |
964 | \ | 961 | \ |
965 | static struct f_midi_opts_attribute f_midi_opts_##name = \ | 962 | CONFIGFS_ATTR(f_midi_opts_, name); |
966 | __CONFIGFS_ATTR(name, S_IRUGO | S_IWUSR, f_midi_opts_##name##_show, \ | ||
967 | f_midi_opts_##name##_store) | ||
968 | 963 | ||
969 | F_MIDI_OPT(index, true, SNDRV_CARDS); | 964 | F_MIDI_OPT(index, true, SNDRV_CARDS); |
970 | F_MIDI_OPT(buflen, false, 0); | 965 | F_MIDI_OPT(buflen, false, 0); |
@@ -972,8 +967,9 @@ F_MIDI_OPT(qlen, false, 0); | |||
972 | F_MIDI_OPT(in_ports, true, MAX_PORTS); | 967 | F_MIDI_OPT(in_ports, true, MAX_PORTS); |
973 | F_MIDI_OPT(out_ports, true, MAX_PORTS); | 968 | F_MIDI_OPT(out_ports, true, MAX_PORTS); |
974 | 969 | ||
975 | static ssize_t f_midi_opts_id_show(struct f_midi_opts *opts, char *page) | 970 | static ssize_t f_midi_opts_id_show(struct config_item *item, char *page) |
976 | { | 971 | { |
972 | struct f_midi_opts *opts = to_f_midi_opts(item); | ||
977 | int result; | 973 | int result; |
978 | 974 | ||
979 | mutex_lock(&opts->lock); | 975 | mutex_lock(&opts->lock); |
@@ -989,9 +985,10 @@ static ssize_t f_midi_opts_id_show(struct f_midi_opts *opts, char *page) | |||
989 | return result; | 985 | return result; |
990 | } | 986 | } |
991 | 987 | ||
992 | static ssize_t f_midi_opts_id_store(struct f_midi_opts *opts, | 988 | static ssize_t f_midi_opts_id_store(struct config_item *item, |
993 | const char *page, size_t len) | 989 | const char *page, size_t len) |
994 | { | 990 | { |
991 | struct f_midi_opts *opts = to_f_midi_opts(item); | ||
995 | int ret; | 992 | int ret; |
996 | char *c; | 993 | char *c; |
997 | 994 | ||
@@ -1016,17 +1013,15 @@ end: | |||
1016 | return ret; | 1013 | return ret; |
1017 | } | 1014 | } |
1018 | 1015 | ||
1019 | static struct f_midi_opts_attribute f_midi_opts_id = | 1016 | CONFIGFS_ATTR(f_midi_opts_, id); |
1020 | __CONFIGFS_ATTR(id, S_IRUGO | S_IWUSR, f_midi_opts_id_show, | ||
1021 | f_midi_opts_id_store); | ||
1022 | 1017 | ||
1023 | static struct configfs_attribute *midi_attrs[] = { | 1018 | static struct configfs_attribute *midi_attrs[] = { |
1024 | &f_midi_opts_index.attr, | 1019 | &f_midi_opts_attr_index, |
1025 | &f_midi_opts_buflen.attr, | 1020 | &f_midi_opts_attr_buflen, |
1026 | &f_midi_opts_qlen.attr, | 1021 | &f_midi_opts_attr_qlen, |
1027 | &f_midi_opts_in_ports.attr, | 1022 | &f_midi_opts_attr_in_ports, |
1028 | &f_midi_opts_out_ports.attr, | 1023 | &f_midi_opts_attr_out_ports, |
1029 | &f_midi_opts_id.attr, | 1024 | &f_midi_opts_attr_id, |
1030 | NULL, | 1025 | NULL, |
1031 | }; | 1026 | }; |
1032 | 1027 | ||