Hi Márton, On Sunday 28 February 2010 08:55:04 Németh Márton wrote: > From: Márton Németh <nm127@xxxxxxxxxxx> > > On some webcams a feedback LED can be found. This LED usually shows > the state of streaming mode: this is the "Auto" mode. The LED can > be programmed to constantly switched off state (e.g. for power saving > reasons, preview mode) or on state (e.g. the application shows motion > detection or "on-air"). > > Signed-off-by: Márton Németh <nm127@xxxxxxxxxxx> > --- > diff -r d8fafa7d88dc linux/Documentation/DocBook/v4l/controls.xml > --- a/linux/Documentation/DocBook/v4l/controls.xml Thu Feb 18 19:02:51 2010 > +0100 +++ b/linux/Documentation/DocBook/v4l/controls.xml Sun Feb 28 > 08:41:17 2010 +0100 @@ -311,6 +311,17 @@ > Applications depending on particular custom controls should check the > driver name and version, see <xref linkend="querycap" />.</entry> > </row> > + <row id="v4l2-led"> > + <entry><constant>V4L2_CID_LED</constant></entry> > + <entry>enum</entry> > + <entry>Controls the feedback LED on the camera. In auto mode > +the LED is on when the streaming is active. The LED is off when not > streaming. +The LED can be also turned on and off independent from > streaming. +Possible values for <constant>enum v4l2_led</constant> are: > +<constant>V4L2_CID_LED_AUTO</constant> (0), > +<constant>V4L2_CID_LED_ON</constant> (1) and > +<constant>V4L2_CID_LED_OFF</constant> (2).</entry> > + </row> There's more than just auto, on and off. On Logitech webcams, LEDs can be configured to blink as well. > </tbody> > </tgroup> > </table> > diff -r d8fafa7d88dc linux/Documentation/DocBook/v4l/videodev2.h.xml > --- a/linux/Documentation/DocBook/v4l/videodev2.h.xml Thu Feb 18 19:02:51 > 2010 +0100 +++ b/linux/Documentation/DocBook/v4l/videodev2.h.xml Sun Feb > 28 08:41:17 2010 +0100 @@ -1024,8 +1024,14 @@ > > #define V4L2_CID_ROTATE (V4L2_CID_BASE+34) > #define V4L2_CID_BG_COLOR (V4L2_CID_BASE+35) > +#define V4L2_CID_LED (V4L2_CID_BASE+36) > +enum v4l2_led { > + V4L2_LED_AUTO = 0, > + V4L2_LED_ON = 1, > + V4L2_LED_OFF = 2, > +}; > /* last CID + 1 */ > -#define V4L2_CID_LASTP1 (V4L2_CID_BASE+36) > +#define V4L2_CID_LASTP1 (V4L2_CID_BASE+37) > > /* MPEG-class control IDs defined by V4L2 */ > #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | > 0x900) diff -r d8fafa7d88dc linux/drivers/media/video/v4l2-common.c > --- a/linux/drivers/media/video/v4l2-common.c Thu Feb 18 19:02:51 2010 > +0100 +++ b/linux/drivers/media/video/v4l2-common.c Sun Feb 28 08:41:17 > 2010 +0100 @@ -349,6 +349,12 @@ > "75 useconds", > NULL, > }; > + static const char *led[] = { > + "Auto", > + "On", > + "Off", > + NULL, > + }; > > switch (id) { > case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ: > @@ -389,6 +395,8 @@ > return colorfx; > case V4L2_CID_TUNE_PREEMPHASIS: > return tune_preemphasis; > + case V4L2_CID_LED: > + return led; > default: > return NULL; > } > @@ -434,6 +442,7 @@ > case V4L2_CID_COLORFX: return "Color Effects"; > case V4L2_CID_ROTATE: return "Rotate"; > case V4L2_CID_BG_COLOR: return "Background color"; > + case V4L2_CID_LED: return "Feedback LED"; > > /* MPEG controls */ > case V4L2_CID_MPEG_CLASS: return "MPEG Encoder Controls"; > @@ -575,6 +584,7 @@ > case V4L2_CID_EXPOSURE_AUTO: > case V4L2_CID_COLORFX: > case V4L2_CID_TUNE_PREEMPHASIS: > + case V4L2_CID_LED: > qctrl->type = V4L2_CTRL_TYPE_MENU; > step = 1; > break; > diff -r d8fafa7d88dc linux/include/linux/videodev2.h > --- a/linux/include/linux/videodev2.h Thu Feb 18 19:02:51 2010 +0100 > +++ b/linux/include/linux/videodev2.h Sun Feb 28 08:41:17 2010 +0100 > @@ -1030,8 +1030,14 @@ > > #define V4L2_CID_ROTATE (V4L2_CID_BASE+34) > #define V4L2_CID_BG_COLOR (V4L2_CID_BASE+35) > +#define V4L2_CID_LED (V4L2_CID_BASE+36) > +enum v4l2_led { > + V4L2_LED_AUTO = 0, > + V4L2_LED_ON = 1, > + V4L2_LED_OFF = 2, > +}; enums shouldn't be used in kernelspace <-> userspace APIs, as their size is not stable across ARM ABIs. In this case it won't matter much, the enum not being part of any structure. If someone creates a new ioctl that uses enum v4l2_led as one field of its structure argument, things will break. > /* last CID + 1 */ > -#define V4L2_CID_LASTP1 (V4L2_CID_BASE+36) > +#define V4L2_CID_LASTP1 (V4L2_CID_BASE+37) > > /* MPEG-class control IDs defined by V4L2 */ > #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) -- Regards, Laurent Pinchart -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html