diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-28 12:35:11 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-28 12:35:11 -0400 |
commit | 0851668fdd97e526b2a41f794b785c204dd3d3e0 (patch) | |
tree | 4ef7c20a8be8393006c6fe9627eb29dd30877d61 /include/media/v4l2-device.h | |
parent | 00ebb6382b8d9c7c15b5f8ad230670d8161d38dd (diff) | |
parent | 7655e594945289b418af39f6669fea4666a7b520 (diff) |
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6
* 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6: (505 commits)
[media] af9015: Fix max I2C message size when used with tda18271
[media] IR: initialize ir_raw_event in few more drivers
[media] Guard a divide in v4l1 compat layer
[media] imon: fix nomouse modprobe option
[media] imon: remove redundant change_protocol call
[media] imon: fix my egregious brown paper bag w/rdev/idev split
[media] cafe_ccic: Configure ov7670 correctly
[media] ov7670: allow configuration of image size, clock speed, and I/O method
[media] af9015: support for DigitalNow TinyTwin v3 [1f4d:9016]
[media] af9015: map DigitalNow TinyTwin v2 remote
[media] DigitalNow TinyTwin remote controller
[media] af9015: RC fixes and improvements
videodev2.h.xml: Update to reflect the latest changes at videodev2.h
[media] v4l: document new Bayer and monochrome pixel formats
[media] DocBook/v4l: Add missing formats used on gspca cpia1 and sn9c2028
[media] firedtv: add parameter to fake ca_system_ids in CA_INFO
[media] tm6000: fix a macro coding style issue
tm6000: Remove some ugly debug code
[media] Nova-S-Plus audio line input
[media] [RFC,1/1] V4L2: Use new CAP bits in existing RDS capable drivers
...
Diffstat (limited to 'include/media/v4l2-device.h')
-rw-r--r-- | include/media/v4l2-device.h | 57 |
1 files changed, 39 insertions, 18 deletions
diff --git a/include/media/v4l2-device.h b/include/media/v4l2-device.h index 8bcbd7a0271c..6648036b728d 100644 --- a/include/media/v4l2-device.h +++ b/include/media/v4l2-device.h | |||
@@ -101,46 +101,67 @@ void v4l2_device_unregister_subdev(struct v4l2_subdev *sd); | |||
101 | /* Call the specified callback for all subdevs matching the condition. | 101 | /* Call the specified callback for all subdevs matching the condition. |
102 | Ignore any errors. Note that you cannot add or delete a subdev | 102 | Ignore any errors. Note that you cannot add or delete a subdev |
103 | while walking the subdevs list. */ | 103 | while walking the subdevs list. */ |
104 | #define __v4l2_device_call_subdevs(v4l2_dev, cond, o, f, args...) \ | 104 | #define __v4l2_device_call_subdevs_p(v4l2_dev, sd, cond, o, f, args...) \ |
105 | do { \ | 105 | do { \ |
106 | struct v4l2_subdev *sd; \ | 106 | list_for_each_entry((sd), &(v4l2_dev)->subdevs, list) \ |
107 | if ((cond) && (sd)->ops->o && (sd)->ops->o->f) \ | ||
108 | (sd)->ops->o->f((sd) , ##args); \ | ||
109 | } while (0) | ||
110 | |||
111 | #define __v4l2_device_call_subdevs(v4l2_dev, cond, o, f, args...) \ | ||
112 | do { \ | ||
113 | struct v4l2_subdev *__sd; \ | ||
107 | \ | 114 | \ |
108 | list_for_each_entry(sd, &(v4l2_dev)->subdevs, list) \ | 115 | __v4l2_device_call_subdevs_p(v4l2_dev, __sd, cond, o, \ |
109 | if ((cond) && sd->ops->o && sd->ops->o->f) \ | 116 | f , ##args); \ |
110 | sd->ops->o->f(sd , ##args); \ | ||
111 | } while (0) | 117 | } while (0) |
112 | 118 | ||
113 | /* Call the specified callback for all subdevs matching the condition. | 119 | /* Call the specified callback for all subdevs matching the condition. |
114 | If the callback returns an error other than 0 or -ENOIOCTLCMD, then | 120 | If the callback returns an error other than 0 or -ENOIOCTLCMD, then |
115 | return with that error code. Note that you cannot add or delete a | 121 | return with that error code. Note that you cannot add or delete a |
116 | subdev while walking the subdevs list. */ | 122 | subdev while walking the subdevs list. */ |
117 | #define __v4l2_device_call_subdevs_until_err(v4l2_dev, cond, o, f, args...) \ | 123 | #define __v4l2_device_call_subdevs_until_err_p(v4l2_dev, sd, cond, o, f, args...) \ |
118 | ({ \ | 124 | ({ \ |
119 | struct v4l2_subdev *sd; \ | 125 | long __err = 0; \ |
120 | long err = 0; \ | ||
121 | \ | 126 | \ |
122 | list_for_each_entry(sd, &(v4l2_dev)->subdevs, list) { \ | 127 | list_for_each_entry((sd), &(v4l2_dev)->subdevs, list) { \ |
123 | if ((cond) && sd->ops->o && sd->ops->o->f) \ | 128 | if ((cond) && (sd)->ops->o && (sd)->ops->o->f) \ |
124 | err = sd->ops->o->f(sd , ##args); \ | 129 | __err = (sd)->ops->o->f((sd) , ##args); \ |
125 | if (err && err != -ENOIOCTLCMD) \ | 130 | if (__err && __err != -ENOIOCTLCMD) \ |
126 | break; \ | 131 | break; \ |
127 | } \ | 132 | } \ |
128 | (err == -ENOIOCTLCMD) ? 0 : err; \ | 133 | (__err == -ENOIOCTLCMD) ? 0 : __err; \ |
134 | }) | ||
135 | |||
136 | #define __v4l2_device_call_subdevs_until_err(v4l2_dev, cond, o, f, args...) \ | ||
137 | ({ \ | ||
138 | struct v4l2_subdev *__sd; \ | ||
139 | __v4l2_device_call_subdevs_until_err_p(v4l2_dev, __sd, cond, o, \ | ||
140 | f, args...); \ | ||
129 | }) | 141 | }) |
130 | 142 | ||
131 | /* Call the specified callback for all subdevs matching grp_id (if 0, then | 143 | /* Call the specified callback for all subdevs matching grp_id (if 0, then |
132 | match them all). Ignore any errors. Note that you cannot add or delete | 144 | match them all). Ignore any errors. Note that you cannot add or delete |
133 | a subdev while walking the subdevs list. */ | 145 | a subdev while walking the subdevs list. */ |
134 | #define v4l2_device_call_all(v4l2_dev, grpid, o, f, args...) \ | 146 | #define v4l2_device_call_all(v4l2_dev, grpid, o, f, args...) \ |
135 | __v4l2_device_call_subdevs(v4l2_dev, \ | 147 | do { \ |
136 | !(grpid) || sd->grp_id == (grpid), o, f , ##args) | 148 | struct v4l2_subdev *__sd; \ |
149 | \ | ||
150 | __v4l2_device_call_subdevs_p(v4l2_dev, __sd, \ | ||
151 | !(grpid) || __sd->grp_id == (grpid), o, f , \ | ||
152 | ##args); \ | ||
153 | } while (0) | ||
137 | 154 | ||
138 | /* Call the specified callback for all subdevs matching grp_id (if 0, then | 155 | /* Call the specified callback for all subdevs matching grp_id (if 0, then |
139 | match them all). If the callback returns an error other than 0 or | 156 | match them all). If the callback returns an error other than 0 or |
140 | -ENOIOCTLCMD, then return with that error code. Note that you cannot | 157 | -ENOIOCTLCMD, then return with that error code. Note that you cannot |
141 | add or delete a subdev while walking the subdevs list. */ | 158 | add or delete a subdev while walking the subdevs list. */ |
142 | #define v4l2_device_call_until_err(v4l2_dev, grpid, o, f, args...) \ | 159 | #define v4l2_device_call_until_err(v4l2_dev, grpid, o, f, args...) \ |
143 | __v4l2_device_call_subdevs_until_err(v4l2_dev, \ | 160 | ({ \ |
144 | !(grpid) || sd->grp_id == (grpid), o, f , ##args) | 161 | struct v4l2_subdev *__sd; \ |
162 | __v4l2_device_call_subdevs_until_err_p(v4l2_dev, __sd, \ | ||
163 | !(grpid) || __sd->grp_id == (grpid), o, f , \ | ||
164 | ##args); \ | ||
165 | }) | ||
145 | 166 | ||
146 | #endif | 167 | #endif |