Re: GSoC 2012 Linux-Media!
Hi Antti, I promised to put you in touch with some more knowledgeable people, so here they are. Will made a few comments during our discussions (inserted verbatim below - may or may not be relevant)... Please feel free to respond to Mr Cooke and/or write to him and Greg. Hin-Tak Will Cooke wrote: > The hacks with USB stick are entirely reliant on the chips inside the stick. In > this case, the demod (Realtek RTL2832U)has the ability to pass through to the > USB bus raw 8-bit sampled RF called I/Q > (http://zone.ni.com/devzone/cda/tut/p/id/4805). > > Once you have this raw I/Q data you can demodulate the signals and process them > in software. So it's possible to build an FM radio, an AM radio, a DAB radio, > Ham radio, Packet radio, slow scan TV, basically anything which modulates a sine > wave within the frequency range of the tuner inside the DVB stick. Not all DVB > tuners are created equal. Some will be limited to n hundred MHz, some have a > range as low as 50 or 60 MHz up to a few GHz. > > Chips that have this functionality AND are built in to DVB USB sticks AND cost > less than 20 Dollars are few and far between. So it's pretty rare to find a > compatible USB stick, and not every USB stick can pull off this neat trick. > > There is probably scope to run a project around a single targeted DVB USB stick, > but hardware support would be limited. GNU Radio is a good tool to build the > remodulators. As an example real world application, how about building one of > these sticks in to a laptop and integrating it with the audio stack. Now my > laptop comes with a TV tuner, an FM tuner, a DAB tuner, and so on. > > I hope that helps set the scene a little bit more. Let me know if you need any > more help. > > Cheers, Will Will Cooke wrote: > Hi Till! > > I am familiar with what a USB-DVB stick is, how it works, the inside of a DVB > transport stream, and so on, but... I'm in no way an expert, and I'm in no way a > developer! > > Depending on what sort of mentoring you had in mind, I would be happy to get > involved. > > Can you let me know a little more about the project and what kind of input you > need from me. > > Cheers, Will Antti Palosaari wrote: Moikka! As I have mentioned many people already, I have got Google Summer of Code project for the Linux-Media! It means I can do three months full time work starting from the week 21 (21.05.2012). Originally I applied "Open firmware for ath9k_htc" -project as that was listed but I added own topic for Linux-Media related stuff and it was accepted. It is rather much time I can spend and fix all those problems I have seen during recent years. Schedule is first to fix all DVB USB problems and then move to enhancing DVB CORE / frontend. I planned only general digital television stuff since it is what I know best. But if there is some time I can likely do some other general fixes. Here is short description. http://www.google-melange.com/gsoc/project/google/gsoc2012/crope/10001 I will open another thread just discussing what are the most important things and how those should be fixed "correctly". And there is no blog yet, but sometime ago I created LinuxTV page for Google+. Lets use it: https://plus.google.com/u/0/11135056277089175/posts And my mentor is Hin-Tak Leung. regards Antti -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[GIT PULL FOR 3.5] pvrusb2 driver updates
Mauro: Please pull - this includes a long-awaited change courtesy of Hans Verkuil which finally transitions the driver to video_ioctl2. -Mike Isely The following changes since commit a1ac5dc28d2b4ca78e183229f7c595ffd725241c: [media] gspca - sn9c20x: Change the exposure setting of Omnivision sensors (2012-05-03 15:29:56 -0300) are available in the git repository at: git://git.linuxtv.org/mcisely/pvrusb2-20120504.git pvrusb2-merge-20120504 Hans Verkuil (1): pvrusb2: convert to video_ioctl2 Mike Isely (9): pvrusb2: Stop statically initializing reserved struct fields to zero pvrusb2: Clean up pvr2_hdw_get_detected_std() pvrusb2: Implement querystd for videodev_ioctl2 pvrusb2: Transform video standard detection result into read-only control ID pvrusb2: Fix truncated video standard names (trivial) pvrusb2: Base available video standards on what hardware supports pvrusb2: Trivial tweak to get rid of some redundant dereferences pvrusb2: Get rid of obsolete code for video standard enumeration pvrusb2: For querystd, start with list of hardware-supported standards drivers/media/video/pvrusb2/pvrusb2-hdw-internal.h |6 +- drivers/media/video/pvrusb2/pvrusb2-hdw.c | 193 +--- drivers/media/video/pvrusb2/pvrusb2-hdw.h |9 +- drivers/media/video/pvrusb2/pvrusb2-v4l2.c | 1343 ++-- 4 files changed, 735 insertions(+), 816 deletions(-) -- Mike Isely isely @ isely (dot) net PGP: 03 54 43 4D 75 E5 CC 92 71 16 01 E2 B5 F5 C1 E8 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Creating a DVB-T transport stream with ffmpeg
Hi all, I'm attempting to broadcast an mpeg2 transport stream created with ffmpeg via DVB-T. I have a modulator card with kernel driver, and have successfully modulated (and received with a simple Hauppage DVB-T USB device) a transport stream file I obtained from a friend. My problem is the stream I create myself with ffmpeg (and it's mpegts options, see link below for docs) is detected by my USB receiver's software (it finds the channel name and reports full signal strength), but it displays a black screen with no audio. I used a spectrum analyser to search for the signal, and was able to locate it and view it with sound - so I believe the problem is with normal consumer receivers being unable to understand the stream. I took a look at the two streams with a hex editor, and noticed my friend's stream appears to contain a large quantity of additional data before the media data itself starts. I also noticed that my file browser's thumbnailer was able to generate thumbnails for the streams I created, but was unable to for my friend's stream. I'm hoping that my lack of a picture on the USB receiver is caused by the absence of this additional data. Could anyone with more knowledge of a DVB-T stream's structure shed some light on what my ffmpeg-created stream might be missing that upsets simple consumer receivers (I've tried a couple with identical results)? Many thanks for your time, Tom 1: http://ffmpeg.org/ffmpeg.html#toc-mpegts -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2] add support for DeLOCK-USB-2.0-DVB-T-Receiver-61744
On 05/04/2012 03:49 PM, Gianluca Gennari wrote: > Hi poma, > thanks for the very interesting links. > ;) > Il 04/05/2012 03:27, poma ha scritto: >> On 05/03/2012 11:03 AM, Gianluca Gennari wrote: >>> Hi poma, >>> I have a 0BDA:2838 (Easycap EZTV646) and a 0BDA:2832 (no name 20x20mm >>> mini DVB-T stick) and both are based on the E4000 tuner, which is not >>> supported in the kernel at the moment. >>> I have no idea if there are sticks with the same USB PID and the fc0012 >>> tuner. >> >> OK, second one - no name device is "Realtek RTL2832U reference design"**. >> >> First one: >> Once upon a time there was a "EasyCAP"� >> "After while crocodile!" >> �and "EzCAP" was born. >> http://szforwardvideo.en.alibaba.com/aboutus.html >> Obviously Easycap EZTV646 != EzCAP EzTV646 >> http://www.reddit.com/r/RTLSDR/comments/s6ddo/rtlsdr_compatibility_list_v2_work_in_progress/ >> ezcap EzTV6460BDA:2838 RTL2832U/FC0012 Some revisions >> may have the E4000* >> http://i.imgur.com/mFD1X.jpg >> (Generic)0BDa:2838 RTL2832U/E4000* >> � >> And, in addition: >> http://sdr.osmocom.org/trac/wiki/rtl-sdr >> 0x0bda 0x2832 all of them Generic RTL2832U (e.g. hama nano)** >> 0x0bda 0x2838 E4000 ezcap USB 2.0 DVB-T/DAB/FM dongle >> � >> Maybe? >> https://sites.google.com/site/myrtlsdr/ > > That's it. Opening the device enclosure, I can read this on the PCB: > "EzTV668 1.0" > and it looks identical to the picture posted there. > Groovy! >> "EzCap EZTV646 has got RTL2832U/FC0012. However rtl-sdr must be tweaked >> to force FC0012 tuner because it has the same PID as EZTV668 (PID: >> 0x2838) so running it whithout a tweak will select Elonics E4000 tuner. >> Works, not so good at filtering." >> � >> Conclusion: >> At least two devices share same vid/pid with different tuners - fc0012 >> vs e4000. >> How to resolve this from a drivers perspective in a proper way? > > This is not a big problem: the rtl2832 driver should read the tuner type > from an internal register and load the proper module (or exit with an > error message if the tuner is unsupported). > Ack, thanks! >> Beside, >> there is GPL'ed 'e4k' tuner source code aka 'e4000 improved'*** (Elonics >> E4000) >> by Harald Welte >> http://cgit.osmocom.org/cgit/osmo-sdr/tree/firmware/src/tuner_e4k.c >> http://sdr.osmocom.org/trac/ >> http://sdr.osmocom.org/trac/wiki/rtl-sdr >> http://wiki.spench.net/wiki/RTL2832U*** > > Very nice. So we should ask Harald Welte if he is willing to have his > driver merged in the kernel. > Undoubtedly! Please ping Thomas and Antti, accordingly. >> regards, >> poma >> > > Regards, > Gianluca regards, poma -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2] add support for DeLOCK-USB-2.0-DVB-T-Receiver-61744
On 05/04/2012 08:50 AM, Thomas Mair wrote: > Am 04.05.2012 03:27 schrieb "poma" : >> >> On 05/03/2012 11:03 AM, Gianluca Gennari wrote: >>> Hi poma, >>> I have a 0BDA:2838 (Easycap EZTV646) and a 0BDA:2832 (no name 20x20mm >>> mini DVB-T stick) and both are based on the E4000 tuner, which is not >>> supported in the kernel at the moment. >>> I have no idea if there are sticks with the same USB PID and the fc0012 >>> tuner. >> >> OK, second one - no name device is "Realtek RTL2832U reference design"**. >> >> First one: >> Once upon a time there was a "EasyCAP"… >> "After while crocodile!" >> …and "EzCAP" was born. >> http://szforwardvideo.en.alibaba.com/aboutus.html >> Obviously Easycap EZTV646 != EzCAP EzTV646 >> > http://www.reddit.com/r/RTLSDR/comments/s6ddo/rtlsdr_compatibility_list_v2_work_in_progress/ >> ezcap EzTV646 0BDA:2838 RTL2832U/FC0012 Some revisions > may have the E4000* >> http://i.imgur.com/mFD1X.jpg >> (Generic) 0BDa:2838 RTL2832U/E4000* >> … >> And, in addition: >> http://sdr.osmocom.org/trac/wiki/rtl-sdr >> 0x0bda 0x2832 all of them Generic RTL2832U (e.g. hama nano)** >> 0x0bda 0x2838 E4000 ezcap USB 2.0 DVB-T/DAB/FM dongle >> … >> Maybe? >> https://sites.google.com/site/myrtlsdr/ >> "EzCap EZTV646 has got RTL2832U/FC0012. However rtl-sdr must be tweaked >> to force FC0012 tuner because it has the same PID as EZTV668 (PID: >> 0x2838) so running it whithout a tweak will select Elonics E4000 tuner. >> Works, not so good at filtering." >> … >> Conclusion: >> At least two devices share same vid/pid with different tuners - fc0012 >> vs e4000. >> How to resolve this from a drivers perspective in a proper way? > The handling of the different tuners of devices with the same vid/pid > should not be a problem, because rtl28xxu driver probes for the tuner when > the device is initialized. > Thanks for clarifying! rtl28xxu.c: … * Probe used tuner. We need to know used tuner before demod attach * since there is some demod params needed to set according to tuner. … /* check FC0012 ID register; reg=00 val=a1 */ … >> Beside, >> there is GPL'ed 'e4k' tuner source code aka 'e4000 improved'*** (Elonics >> E4000) >> by Harald Welte >> http://cgit.osmocom.org/cgit/osmo-sdr/tree/firmware/src/tuner_e4k.c >> http://sdr.osmocom.org/trac/ >> http://sdr.osmocom.org/trac/wiki/rtl-sdr >> http://wiki.spench.net/wiki/RTL2832U*** > So what is missing is the e4000 tuner driver. > True. > Btw i do have a list of devices that include the Rtl2832 demod. I will send > that list on the weekend. > Groovy! > Regards > Thomas > regards, poma -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH V4 4/5] Media: Update docs for V4L2 FM new features
Almost perfect :-) Just a few things below and one I noticed in the first patch where you set the maximum length of the various string controls to 0x. I wouldn't do that: the control framework will actually allocate 2 * (maximum + 1) bytes of memory for each string control. It wastes a lot of memory and nobody is ever going to pass in a program name that long. On Fri May 4 2012 22:49:01 manjunatha_ha...@ti.com wrote: > From: Manjunatha Halli > > The list of new features - > 1) New control class for FM RX > 2) New FM RX CID's - De-Emphasis filter mode and RDS AF switch > 3) New FM TX CID - RDS Alternate frequency set. > > Signed-off-by: Manjunatha Halli > --- > Documentation/DocBook/media/v4l/compat.xml |3 + > Documentation/DocBook/media/v4l/controls.xml | 77 > > Documentation/DocBook/media/v4l/dev-rds.xml|5 +- > .../DocBook/media/v4l/vidioc-g-ext-ctrls.xml |7 ++ > .../DocBook/media/v4l/vidioc-s-hw-freq-seek.xml| 35 +- > 5 files changed, 124 insertions(+), 3 deletions(-) > > diff --git a/Documentation/DocBook/media/v4l/compat.xml > b/Documentation/DocBook/media/v4l/compat.xml > index bce97c5..df1f345 100644 > --- a/Documentation/DocBook/media/v4l/compat.xml > +++ b/Documentation/DocBook/media/v4l/compat.xml > @@ -2311,6 +2311,9 @@ more information. > Added FM Modulator (FM TX) Extended Control Class: > V4L2_CTRL_CLASS_FM_TX and their Control IDs. > > > + Added FM Receiver (FM RX) Extended Control Class: > V4L2_CTRL_CLASS_FM_RX and their Control IDs. > + > + > Added Remote Controller chapter, describing the default Remote > Controller mapping for media devices. > > > diff --git a/Documentation/DocBook/media/v4l/controls.xml > b/Documentation/DocBook/media/v4l/controls.xml > index b84f25e..b831dd7 100644 > --- a/Documentation/DocBook/media/v4l/controls.xml > +++ b/Documentation/DocBook/media/v4l/controls.xml > @@ -3018,6 +3018,12 @@ to find receivers which can scroll strings sized as 32 > x N or 64 x N characters. > with steps of 32 or 64 characters. The result is it must always contain a > string with size multiple of 32 or 64. > > > +spanname="id">V4L2_CID_RDS_TX_AF_FREQ > + integer > + > + Sets the RDS Alternate Frequency value > which allows a receiver to re-tune to a different frequency providing the > same station when the first signal becomes too weak (e.g., when moving out of > range). > + > + >spanname="id">V4L2_CID_AUDIO_LIMITER_ENABLED > boolean > > @@ -3146,6 +3152,77 @@ manually or automatically if set to zero. Unit, range > and step are driver-specif > document, from CENELEC. > > > + > + FM Receiver Control Reference > + > + The FM Receiver (FM_RX) class includes controls for common > features of > +FM Reception capable devices. > + > + > + FM_RX Control IDs > + > + > + > + > + > + > + > + > + > + > +ID > +Type > + align="left">Description > + > + > + > + > + > + spanname="id">V4L2_CID_FM_RX_CLASS > +class > + The FM_RX class > +descriptor. Calling &VIDIOC-QUERYCTRL; for this control will return a > +description of this control class. > + > + > + spanname="id">V4L2_CID_RDS_AF_SWITCH > +boolean > + > + Enable or Disable the RDS Alternate > frequency feature. When enabled the driver will decode the RDS AF field and > tries to switch to this AF frequency once the current frequency RSSI level > goes below the threshold. If the frequency is switched, then > &VIDIOC-G-FREQUENCY; will return the new frequency. You will need to explain 'RSSI' here. It's not an abbreviation everyone will know. > + > + > + spanname="id">V4L2_CID_TUNE_DEEMPHASIS > + integer > + > + Configures the > de-emphasis value for reception. > +A pre-emphasis filter is applied to the broadcast to accentuate the high > audio frequencies. > +Depending on the region, a time constant of either 50 or 75 useconds is > used. The enum v4l2_preemphasis > +defines possible values for pre-emphasis. Here they are: > + > + > + > + > + > V4L2_PREEMPHASIS_DISABLED > + No de-emphasis is applied. > + > + > + > V4L2_PREEMPHASIS_50_uS > + A de-emphasis of 50 uS is used. > + > + > + > V4L2_PREEMPHASIS_75_uS > + A de-emphasis of 75 uS is used. > + > + > + > + > + > +
[PATCH V4 2/5] New control class and features for FM RX
From: Manjunatha Halli This patch creates new ctrl class for FM RX and adds new CID's for below FM features, 1) De-Emphasis filter mode 2) RDS Alternate Frequency switch Also this patch adds a field for band selection in struct v4l2_hw_freq_seek Signed-off-by: Manjunatha Halli --- drivers/media/video/v4l2-ctrls.c | 17 ++--- include/linux/videodev2.h| 19 ++- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/drivers/media/video/v4l2-ctrls.c b/drivers/media/video/v4l2-ctrls.c index 18015c0..9d7608e 100644 --- a/drivers/media/video/v4l2-ctrls.c +++ b/drivers/media/video/v4l2-ctrls.c @@ -243,8 +243,8 @@ const char * const *v4l2_ctrl_get_menu(u32 id) "Vivid", NULL }; - static const char * const tune_preemphasis[] = { - "No Preemphasis", + static const char * const tune_emphasis[] = { + "None", "50 Microseconds", "75 Microseconds", NULL, @@ -413,7 +413,9 @@ const char * const *v4l2_ctrl_get_menu(u32 id) case V4L2_CID_COLORFX: return colorfx; case V4L2_CID_TUNE_PREEMPHASIS: - return tune_preemphasis; + return tune_emphasis; + case V4L2_CID_TUNE_DEEMPHASIS: + return tune_emphasis; case V4L2_CID_FLASH_LED_MODE: return flash_led_mode; case V4L2_CID_FLASH_STROBE_SOURCE: @@ -644,6 +646,12 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_JPEG_COMPRESSION_QUALITY: return "Compression Quality"; case V4L2_CID_JPEG_ACTIVE_MARKER: return "Active Markers"; + /* FM Radio Receiver control */ + /* Keep the order of the 'case's the same as in videodev2.h! */ + case V4L2_CID_FM_RX_CLASS: return "FM Radio Receiver Controls"; + case V4L2_CID_RDS_AF_SWITCH:return "RDS Alternate Frequency Switch"; + case V4L2_CID_TUNE_DEEMPHASIS: return "De-Emphasis"; + default: return NULL; } @@ -688,6 +696,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, case V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM: case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE: case V4L2_CID_MPEG_VIDEO_MPEG4_QPEL: + case V4L2_CID_RDS_AF_SWITCH: *type = V4L2_CTRL_TYPE_BOOLEAN; *min = 0; *max = *step = 1; @@ -733,6 +742,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL: case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE: case V4L2_CID_JPEG_CHROMA_SUBSAMPLING: + case V4L2_CID_TUNE_DEEMPHASIS: *type = V4L2_CTRL_TYPE_MENU; break; case V4L2_CID_RDS_TX_PS_NAME: @@ -745,6 +755,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, case V4L2_CID_FM_TX_CLASS: case V4L2_CID_FLASH_CLASS: case V4L2_CID_JPEG_CLASS: + case V4L2_CID_FM_RX_CLASS: *type = V4L2_CTRL_TYPE_CTRL_CLASS; /* You can neither read not write these */ *flags |= V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_WRITE_ONLY; diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index c9c9a46..534a3f1 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h @@ -1137,6 +1137,7 @@ struct v4l2_ext_controls { #define V4L2_CTRL_CLASS_FM_TX 0x009b /* FM Modulator control class */ #define V4L2_CTRL_CLASS_FLASH 0x009c /* Camera flash controls */ #define V4L2_CTRL_CLASS_JPEG 0x009d/* JPEG-compression controls */ +#define V4L2_CTRL_CLASS_FM_RX 0x009e /* FM Receiver control class */ #define V4L2_CTRL_ID_MASK(0x0fff) #define V4L2_CTRL_ID2CLASS(id)((id) & 0x0fffUL) @@ -1782,6 +1783,13 @@ enum v4l2_jpeg_chroma_subsampling { #defineV4L2_JPEG_ACTIVE_MARKER_DQT (1 << 17) #defineV4L2_JPEG_ACTIVE_MARKER_DHT (1 << 18) +/* FM Receiver class control IDs */ +#define V4L2_CID_FM_RX_CLASS_BASE (V4L2_CTRL_CLASS_FM_RX | 0x900) +#define V4L2_CID_FM_RX_CLASS (V4L2_CTRL_CLASS_FM_RX | 1) + +#define V4L2_CID_RDS_AF_SWITCH (V4L2_CID_FM_RX_CLASS_BASE + 1) +#define V4L2_CID_TUNE_DEEMPHASIS (V4L2_CID_FM_RX_CLASS_BASE + 2) + /* * T U N I N G */ @@ -1843,13 +1851,22 @@ struct v4l2_frequency { __u32 reserved[8]; }; + +#define FM_BAND_TYPE_ALL 0 /* All Bands 65.8 MHz till 108 Mhz + or 162.55 MHz if weather band */ +#define FM_BAND_TYPE_EUROPE_US 1 /* 87.5 Mhz - 108 MHz*/ +#define FM_BAND_TYPE_JAPAN 2 /* 76 MHz - 90 MHz*/ +#define FM_BAND_TYPE_RUSSIAN 3 /* 65.8 MHz - 74 MHz*/ +#define FM_BAN
[PATCH V4 0/5] [Media] Radio: Fixes and New features for FM
From: Manjunatha Halli Mauro and the list, This version 4 of patchset resolves the comments received from Han's on patchset v3. This patchset creates new control class 'V4L2_CTRL_CLASS_FM_RX' for FM RX, introduces 2 new CID's for FM RX and and 1 new CID for FM TX. Also adds 1 field in struct v4l2_hw_freq_seek. This patch adds few new features to TI's FM driver features are listed below, 1) FM TX RDS Support (RT, PS, AF, PI, PTY) 2) FM RX Russian band support 3) FM RX AF set/get 4) FM RX De-emphasis mode set/get Along with new features this patch also fixes few issues in the driver like default rssi level for seek, unnecessory logs etc. Manjunatha Halli (5): WL128x: Add support for FM TX RDS New control class and features for FM RX Add new CID for FM TX RDS Alternate Frequency Media: Update docs for V4L2 FM new features WL12xx: Add support for FM new features. Documentation/DocBook/media/v4l/compat.xml |3 + Documentation/DocBook/media/v4l/controls.xml | 77 +++ Documentation/DocBook/media/v4l/dev-rds.xml|5 +- .../DocBook/media/v4l/vidioc-g-ext-ctrls.xml |7 + .../DocBook/media/v4l/vidioc-s-hw-freq-seek.xml| 35 +- drivers/media/radio/wl128x/fmdrv.h |3 +- drivers/media/radio/wl128x/fmdrv_common.c | 55 ++-- drivers/media/radio/wl128x/fmdrv_common.h | 43 +- drivers/media/radio/wl128x/fmdrv_rx.c | 92 ++--- drivers/media/radio/wl128x/fmdrv_rx.h |2 +- drivers/media/radio/wl128x/fmdrv_tx.c | 41 +++ drivers/media/radio/wl128x/fmdrv_tx.h |3 +- drivers/media/radio/wl128x/fmdrv_v4l2.c| 138 +++- drivers/media/video/v4l2-ctrls.c | 18 ++- include/linux/videodev2.h | 20 +++- 15 files changed, 462 insertions(+), 80 deletions(-) -- 1.7.4.1 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH V4 1/5] WL128x: Add support for FM TX RDS
From: Manjunatha Halli This patch adds support for following FM TX RDS features, 1. Radio Text 2. PS Name 3. PI Code 4. PTY Code. Along with above this patch fixes few other minor issues(like fm tx get frequency, unnecessary error messages etc). Signed-off-by: Manjunatha Halli --- drivers/media/radio/wl128x/fmdrv_common.c | 17 +++--- drivers/media/radio/wl128x/fmdrv_common.h | 17 +++ drivers/media/radio/wl128x/fmdrv_rx.c |2 +- drivers/media/radio/wl128x/fmdrv_tx.c | 41 ++--- drivers/media/radio/wl128x/fmdrv_tx.h |3 +- drivers/media/radio/wl128x/fmdrv_v4l2.c | 47 + 6 files changed, 90 insertions(+), 37 deletions(-) diff --git a/drivers/media/radio/wl128x/fmdrv_common.c b/drivers/media/radio/wl128x/fmdrv_common.c index bf867a6..fcce61a 100644 --- a/drivers/media/radio/wl128x/fmdrv_common.c +++ b/drivers/media/radio/wl128x/fmdrv_common.c @@ -354,7 +354,7 @@ static void send_tasklet(unsigned long arg) /* Check, is there any timeout happened to last transmitted packet */ if ((jiffies - fmdev->last_tx_jiffies) > FM_DRV_TX_TIMEOUT) { - fmerr("TX timeout occurred\n"); + fmdbg("TX timeout occurred\n"); atomic_set(&fmdev->tx_cnt, 1); } @@ -615,7 +615,11 @@ static void fm_irq_handle_rds_start(struct fmdev *fmdev) { if (fmdev->irq_info.flag & FM_RDS_EVENT & fmdev->irq_info.mask) { fmdbg("irq: rds threshold reached\n"); - fmdev->irq_info.stage = FM_RDS_SEND_RDS_GETCMD_IDX; + /* If RSSI reached below threshold then dont get RDS data */ + if (fmdev->irq_info.flag & FM_LEV_EVENT) + fmdev->irq_info.stage = FM_HW_TUNE_OP_ENDED_IDX; + else + fmdev->irq_info.stage = FM_RDS_SEND_RDS_GETCMD_IDX; } else { /* Continue next function in interrupt handler table */ fmdev->irq_info.stage = FM_HW_TUNE_OP_ENDED_IDX; @@ -1129,8 +1133,9 @@ int fmc_set_freq(struct fmdev *fmdev, u32 freq_to_set) int fmc_get_freq(struct fmdev *fmdev, u32 *cur_tuned_frq) { - if (fmdev->rx.freq == FM_UNDEFINED_FREQ) { - fmerr("RX frequency is not set\n"); + if (fmdev->rx.freq == FM_UNDEFINED_FREQ && + fmdev->tx_data.tx_frq == FM_UNDEFINED_FREQ) { + fmerr("RX/TX frequency is not set\n"); return -EPERM; } if (cur_tuned_frq == NULL) { @@ -1144,7 +1149,7 @@ int fmc_get_freq(struct fmdev *fmdev, u32 *cur_tuned_frq) return 0; case FM_MODE_TX: - *cur_tuned_frq = 0; /* TODO : Change this later */ + *cur_tuned_frq = fmdev->tx_data.tx_frq; return 0; default: @@ -1574,6 +1579,8 @@ int fmc_prepare(struct fmdev *fmdev) fmdev->rx.af_mode = FM_RX_RDS_AF_SWITCH_MODE_OFF; fmdev->irq_info.retry = 0; + fmdev->tx_data.tx_frq = FM_UNDEFINED_FREQ; + fm_rx_reset_rds_cache(fmdev); init_waitqueue_head(&fmdev->rx.rds.read_queue); diff --git a/drivers/media/radio/wl128x/fmdrv_common.h b/drivers/media/radio/wl128x/fmdrv_common.h index d9b9c6c..196ff7d 100644 --- a/drivers/media/radio/wl128x/fmdrv_common.h +++ b/drivers/media/radio/wl128x/fmdrv_common.h @@ -48,8 +48,8 @@ struct fm_reg_table { #define SEARCH_LVL_SET 15 #define BAND_SET 16 #define MUTE_STATUS_SET 17 -#define RDS_PAUSE_LVL_SET18 -#define RDS_PAUSE_DUR_SET19 +#define AUD_PAUSE_LVL_SET18 +#define AUD_PAUSE_DUR_SET19 #define RDS_MEM_SET 20 #define RDS_BLK_B_SET21 #define RDS_MSK_B_SET22 @@ -84,11 +84,12 @@ struct fm_reg_table { #define FM_POWER_MODE254 #define FM_INTERRUPT 255 +#define STATION_VALID 123 /* Transmitter API */ #define CHANL_SET55 -#define CHANL_BW_SET 56 +#define SCAN_SPACING_SET 56 #define REF_SET 57 #define POWER_ENB_SET90 #define POWER_ATT_SET58 @@ -103,7 +104,8 @@ struct fm_reg_table { #define MONO_SET 66 #define MUTE 92 #define MPX_LMT_ENABLE 67 -#define PI_SET 93 +#define REF_ERR_SET 93 +#define PI_SET 68 #define ECC_SET 69 #define PTY 70 #define AF 71 @@ -120,6 +122,10 @@ struct fm_reg_table { #define TX_AUDIO_LEVEL_TEST 96 #define TX_AUDIO_LEVEL_TEST_THRESHOLD73 #define TX_AUDIO_INPUT_LEVEL_RANGE_SET 54 +#define TX_AUDIO_LEVEL_GET 7 +#define READ_FMANT_TUNE_VALUE104 + +/* New FM APIs (Rx and Tx) */ #define RX_ANTENNA_SELECT87 #define I2C_DEV_ADDR_SET 86 #define REF_ERR_CALIB_PARAM_SET
[PATCH V4 3/5] Add new CID for FM TX RDS Alternate Frequency
From: Manjunatha Halli Signed-off-by: Manjunatha Halli --- drivers/media/video/v4l2-ctrls.c |1 + include/linux/videodev2.h|1 + 2 files changed, 2 insertions(+), 0 deletions(-) diff --git a/drivers/media/video/v4l2-ctrls.c b/drivers/media/video/v4l2-ctrls.c index 9d7608e..610076c 100644 --- a/drivers/media/video/v4l2-ctrls.c +++ b/drivers/media/video/v4l2-ctrls.c @@ -608,6 +608,7 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_RDS_TX_PTY: return "RDS Program Type"; case V4L2_CID_RDS_TX_PS_NAME: return "RDS PS Name"; case V4L2_CID_RDS_TX_RADIO_TEXT:return "RDS Radio Text"; + case V4L2_CID_RDS_TX_AF_FREQ: return "RDS Alternate Frequency"; case V4L2_CID_AUDIO_LIMITER_ENABLED:return "Audio Limiter Feature Enabled"; case V4L2_CID_AUDIO_LIMITER_RELEASE_TIME: return "Audio Limiter Release Time"; case V4L2_CID_AUDIO_LIMITER_DEVIATION: return "Audio Limiter Deviation"; diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 534a3f1..e7a8e96 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h @@ -1699,6 +1699,7 @@ enum v4l2_exposure_auto_type { #define V4L2_CID_RDS_TX_PTY(V4L2_CID_FM_TX_CLASS_BASE + 3) #define V4L2_CID_RDS_TX_PS_NAME (V4L2_CID_FM_TX_CLASS_BASE + 5) #define V4L2_CID_RDS_TX_RADIO_TEXT (V4L2_CID_FM_TX_CLASS_BASE + 6) +#define V4L2_CID_RDS_TX_AF_FREQ (V4L2_CID_FM_TX_CLASS_BASE + 7) #define V4L2_CID_AUDIO_LIMITER_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 64) #define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME(V4L2_CID_FM_TX_CLASS_BASE + 65) -- 1.7.4.1 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH V4 4/5] Media: Update docs for V4L2 FM new features
From: Manjunatha Halli The list of new features - 1) New control class for FM RX 2) New FM RX CID's - De-Emphasis filter mode and RDS AF switch 3) New FM TX CID - RDS Alternate frequency set. Signed-off-by: Manjunatha Halli --- Documentation/DocBook/media/v4l/compat.xml |3 + Documentation/DocBook/media/v4l/controls.xml | 77 Documentation/DocBook/media/v4l/dev-rds.xml|5 +- .../DocBook/media/v4l/vidioc-g-ext-ctrls.xml |7 ++ .../DocBook/media/v4l/vidioc-s-hw-freq-seek.xml| 35 +- 5 files changed, 124 insertions(+), 3 deletions(-) diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml index bce97c5..df1f345 100644 --- a/Documentation/DocBook/media/v4l/compat.xml +++ b/Documentation/DocBook/media/v4l/compat.xml @@ -2311,6 +2311,9 @@ more information. Added FM Modulator (FM TX) Extended Control Class: V4L2_CTRL_CLASS_FM_TX and their Control IDs. + Added FM Receiver (FM RX) Extended Control Class: V4L2_CTRL_CLASS_FM_RX and their Control IDs. + + Added Remote Controller chapter, describing the default Remote Controller mapping for media devices. diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml index b84f25e..b831dd7 100644 --- a/Documentation/DocBook/media/v4l/controls.xml +++ b/Documentation/DocBook/media/v4l/controls.xml @@ -3018,6 +3018,12 @@ to find receivers which can scroll strings sized as 32 x N or 64 x N characters. with steps of 32 or 64 characters. The result is it must always contain a string with size multiple of 32 or 64. + V4L2_CID_RDS_TX_AF_FREQ + integer + + Sets the RDS Alternate Frequency value which allows a receiver to re-tune to a different frequency providing the same station when the first signal becomes too weak (e.g., when moving out of range). + + V4L2_CID_AUDIO_LIMITER_ENABLED boolean @@ -3146,6 +3152,77 @@ manually or automatically if set to zero. Unit, range and step are driver-specif document, from CENELEC. + + FM Receiver Control Reference + + The FM Receiver (FM_RX) class includes controls for common features of +FM Reception capable devices. + + + FM_RX Control IDs + + + + + + + + + + +ID +Type + Description + + + + + +V4L2_CID_FM_RX_CLASS +class + The FM_RX class +descriptor. Calling &VIDIOC-QUERYCTRL; for this control will return a +description of this control class. + + +V4L2_CID_RDS_AF_SWITCH +boolean + + Enable or Disable the RDS Alternate frequency feature. When enabled the driver will decode the RDS AF field and tries to switch to this AF frequency once the current frequency RSSI level goes below the threshold. If the frequency is switched, then &VIDIOC-G-FREQUENCY; will return the new frequency. + + + V4L2_CID_TUNE_DEEMPHASIS + integer + + Configures the de-emphasis value for reception. +A pre-emphasis filter is applied to the broadcast to accentuate the high audio frequencies. +Depending on the region, a time constant of either 50 or 75 useconds is used. The enum v4l2_preemphasis +defines possible values for pre-emphasis. Here they are: + + + + + V4L2_PREEMPHASIS_DISABLED + No de-emphasis is applied. + + + V4L2_PREEMPHASIS_50_uS + A de-emphasis of 50 uS is used. + + + V4L2_PREEMPHASIS_75_uS + A de-emphasis of 75 uS is used. + + + + + + + + + + + Flash Control Reference diff --git a/Documentation/DocBook/media/v4l/dev-rds.xml b/Documentation/DocBook/media/v4l/dev-rds.xml index 38883a4..8188161 100644 --- a/Documentation/DocBook/media/v4l/dev-rds.xml +++ b/Documentation/DocBook/media/v4l/dev-rds.xml @@ -55,8 +55,9 @@ If the driver only passes RDS blocks without interpreting the data the V4L2_TUNER_CAP_RDS_BLOCK_IO flag has to be set. If the tuner is capable of handling RDS entities like program identification codes and radio text, the flag V4L2_TUNER_CAP_RDS_CONTROLS should be set, -see Writing RDS data and -FM Transmitter Control Reference. +see Writing RDS data, +FM Transmitter Control Reference +FM Receiver Control Reference. diff --git a/Documentation
[PATCH V4 5/5] WL12xx: Add support for FM new features.
From: Manjunatha Halli This patch adds below features to TI's V4l2 FM driver for Wilink chipsets, 1) FM RX Set frequency allows to set frequency anywhere between 65.5 MHz till 108 MHz (if chip is Wilink8 then till 164.55 MHz) 2) FM RX seek caters for band switch 3) FM RX RDS AF turn ON/OFF 4) FM RX De-Emphasis mode set/get 5) FM TX Alternate Frequency set/get Also this patch fixes below issues 1) FM audio volume gain setting 2) Default rssi level is set to 8 instead of 20 3) Issue related to audio mute/unmute 4) Enable FM RX AF support in driver 5) In wrap_around seek mode try for once Signed-off-by: Manjunatha Halli --- drivers/media/radio/wl128x/fmdrv.h|3 +- drivers/media/radio/wl128x/fmdrv_common.c | 38 ++--- drivers/media/radio/wl128x/fmdrv_common.h | 28 - drivers/media/radio/wl128x/fmdrv_rx.c | 90 +++-- drivers/media/radio/wl128x/fmdrv_rx.h |2 +- drivers/media/radio/wl128x/fmdrv_v4l2.c | 91 +++-- 6 files changed, 215 insertions(+), 37 deletions(-) diff --git a/drivers/media/radio/wl128x/fmdrv.h b/drivers/media/radio/wl128x/fmdrv.h index d84ad9d..c806c85 100644 --- a/drivers/media/radio/wl128x/fmdrv.h +++ b/drivers/media/radio/wl128x/fmdrv.h @@ -150,6 +150,7 @@ struct fm_rx { struct region_info region; /* Current selected band */ u32 freq; /* Current RX frquency */ u8 mute_mode; /* Current mute mode */ + u8 bl_flag; /* Band limit reached flag */ u8 deemphasis_mode; /* Current deemphasis mode */ /* RF dependent soft mute mode */ u8 rf_depend_mute; @@ -203,7 +204,7 @@ struct fmtx_data { struct fmdev { struct video_device *radio_dev; /* V4L2 video device pointer */ struct snd_card *card; /* Card which holds FM mixer controls */ - u16 asci_id; + u16 asic_id; spinlock_t rds_buff_lock; /* To protect access to RDS buffer */ spinlock_t resp_skb_lock; /* To protect access to received SKB */ diff --git a/drivers/media/radio/wl128x/fmdrv_common.c b/drivers/media/radio/wl128x/fmdrv_common.c index fcce61a..ac20556 100644 --- a/drivers/media/radio/wl128x/fmdrv_common.c +++ b/drivers/media/radio/wl128x/fmdrv_common.c @@ -44,20 +44,41 @@ /* Region info */ static struct region_info region_configs[] = { + /* Super set of all bands */ + { +.chanl_space = FM_CHANNEL_SPACING_200KHZ * FM_FREQ_MUL, +.bot_freq = 65800, /* 87.5 MHz */ +.top_freq = 162550,/* 108 MHz */ +.fm_band = 0, +}, /* Europe/US */ { .chanl_space = FM_CHANNEL_SPACING_200KHZ * FM_FREQ_MUL, .bot_freq = 87500, /* 87.5 MHz */ .top_freq = 108000,/* 108 MHz */ -.fm_band = 0, +.fm_band = 1, }, /* Japan */ { .chanl_space = FM_CHANNEL_SPACING_200KHZ * FM_FREQ_MUL, .bot_freq = 76000, /* 76 MHz */ .top_freq = 9, /* 90 MHz */ -.fm_band = 1, +.fm_band = 2, }, + /* Russian (OIRT) band */ + { + .chanl_space = FM_CHANNEL_SPACING_50KHZ * FM_FREQ_MUL_RUS, + .bot_freq = 65800, /* 65.8 MHz */ + .top_freq = 74000, /* 74 MHz */ + .fm_band = 3, + }, + /* Wether Band */ + { + .chanl_space = FM_CHANNEL_SPACING_50KHZ * FM_FREQ_MUL_WB, + .bot_freq = 162400, /* 162.4 MHz */ + .top_freq = 162550, /* 162.55 MHz */ + .fm_band = 4, + } }; /* Band selection */ @@ -596,7 +617,6 @@ static void fm_irq_handle_flag_getcmd_resp(struct fmdev *fmdev) memcpy(&fmdev->irq_info.flag, skb->data, fm_evt_hdr->dlen); fmdev->irq_info.flag = be16_to_cpu(fmdev->irq_info.flag); - fmdbg("irq: flag register(0x%x)\n", fmdev->irq_info.flag); /* Continue next function in interrupt handler table */ fm_irq_call_stage(fmdev, FM_HW_MAL_FUNC_IDX); @@ -702,7 +722,7 @@ static void fm_rdsparse_swapbytes(struct fmdev *fmdev, * in Dolphin they are in big endian, the parsing of the RDS data * is chip dependent */ - if (fmdev->asci_id != 0x6350) { + if (fmdev->asic_id != 0x6350) { rds_buff = &rds_format->data.groupdatabuff.buff[0]; while (index + 1 < FM_RX_RDS_INFO_FIELD_MAX) { byte1 = rds_buff[index]; @@ -1353,11 +1373,13 @@ static int fm_power_up(struct fmdev *fmdev, u8 mode) sizeof(asic_ver), &asic_ver, &resp_len)) goto rel; + fmdev->asic_id = be16_to_cpu(asic_id); + fmdbg("ASIC ID: 0x%x , ASIC Version: %d\n", - be16_to_cpu(asic_id), be16_to_cpu(asic_ver)); + fmdev->asic_id, be16_to_cpu(asic_ver)); sprintf(fw_name, "%s_%x.%d.bts", FM_FMC_FW_FILE_START, -
[PATCH/RFC v4 01/12] V4L: Add helper function for standard integer menu controls
This patch adds v4l2_ctrl_new_std_int_menu() helper function which can be used in drivers for creating standard integer menu control. It is similar to v4l2_ctrl_new_std_menu(), except it doesn't have a mask parameter and an additional qmenu parameter allows passing an array of signed 64-bit integers constituting the menu items. Signed-off-by: Sylwester Nawrocki Signed-off-by: Kyungmin Park --- Documentation/video4linux/v4l2-controls.txt | 22 ++ drivers/media/video/v4l2-ctrls.c| 21 + include/media/v4l2-ctrls.h | 17 + 3 files changed, 60 insertions(+) diff --git a/Documentation/video4linux/v4l2-controls.txt b/Documentation/video4linux/v4l2-controls.txt index e2492a9..c536d32 100644 --- a/Documentation/video4linux/v4l2-controls.txt +++ b/Documentation/video4linux/v4l2-controls.txt @@ -130,8 +130,18 @@ Menu controls are added by calling v4l2_ctrl_new_std_menu: const struct v4l2_ctrl_ops *ops, u32 id, s32 max, s32 skip_mask, s32 def); +Or alternatively for integer menu controls, by calling v4l2_ctrl_new_std_int_menu: + + struct v4l2_ctrl *v4l2_ctrl_new_std_int_menu(struct v4l2_ctrl_handler *hdl, + const struct v4l2_ctrl_ops *ops, + u32 id, s32 max, s32 def, const s64 *qmenu_int); + These functions are typically called right after the v4l2_ctrl_handler_init: + static const s64 exp_bias_qmenu[] = { + -2, -1, 0, 1, 2 + }; + v4l2_ctrl_handler_init(&foo->ctrl_handler, nr_of_controls); v4l2_ctrl_new_std(&foo->ctrl_handler, &foo_ctrl_ops, V4L2_CID_BRIGHTNESS, 0, 255, 1, 128); @@ -141,6 +151,11 @@ These functions are typically called right after the v4l2_ctrl_handler_init: V4L2_CID_POWER_LINE_FREQUENCY, V4L2_CID_POWER_LINE_FREQUENCY_60HZ, 0, V4L2_CID_POWER_LINE_FREQUENCY_DISABLED); + v4l2_ctrl_new_std_int_menu(&foo->ctrl_handler, &foo_ctrl_ops, + V4L2_CID_EXPOSURE_BIAS, + ARRAY_SIZE(exp_bias_qmenu) - 1, + ARRAY_SIZE(exp_bias_qmenu) / 2 - 1, + exp_bias_qmenu); ... if (foo->ctrl_handler.error) { int err = foo->ctrl_handler.error; @@ -164,6 +179,11 @@ controls. There is no min argument since that is always 0 for menu controls, and instead of a step there is a skip_mask argument: if bit X is 1, then menu item X is skipped. +The v4l2_ctrl_new_std_int_menu function creates a new standard integer menu +control. It differs from v4l2_ctrl_new_std_menu in that it doesn't have the +mask argument and takes as the last argument an array of signed 64-bit +integers that form an exact menu item list. + Note that if something fails, the function will return NULL or an error and set ctrl_handler->error to the error code. If ctrl_handler->error was already set, then it will just return and do nothing. This is also true for @@ -346,6 +366,8 @@ it to 0 means that all menu items are supported. You set this mask either through the v4l2_ctrl_config struct for a custom control, or by calling v4l2_ctrl_new_std_menu(). +For integer menu controls menu_skip_mask remains unused, it is set to 0 +within v4l2_ctrl_new_std_int_menu(). Custom Controls === diff --git a/drivers/media/video/v4l2-ctrls.c b/drivers/media/video/v4l2-ctrls.c index c93a979..e0725b5 100644 --- a/drivers/media/video/v4l2-ctrls.c +++ b/drivers/media/video/v4l2-ctrls.c @@ -1517,6 +1517,27 @@ struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl, } EXPORT_SYMBOL(v4l2_ctrl_new_std_menu); +/* Helper function for standard integer menu controls */ +struct v4l2_ctrl *v4l2_ctrl_new_std_int_menu(struct v4l2_ctrl_handler *hdl, + const struct v4l2_ctrl_ops *ops, + u32 id, s32 max, s32 def, const s64 *qmenu_int) +{ + const char *name; + enum v4l2_ctrl_type type; + s32 min; + s32 step; + u32 flags; + + v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags); + if (type != V4L2_CTRL_TYPE_INTEGER_MENU) { + handler_set_err(hdl, -EINVAL); + return NULL; + } + return v4l2_ctrl_new(hdl, ops, id, name, type, +0, max, 0, def, flags, NULL, qmenu_int, NULL); +} +EXPORT_SYMBOL(v4l2_ctrl_new_std_int_menu); + /* Add a control from another handler to this handler */ struct v4l2_ctrl *v4l2_ctrl_add_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_ctrl *ctrl) diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h index 8920f82..15116d2 100644 --- a/include/media/v4l2-ctrls.h +++ b/include/media/v4l2-ctrls.h @@ -347,6 +347,23 @@ struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ct
[PATCH/RFC v4 05/12] V4L: Add camera image stabilization control
Add V4L2_CID_IMAGE_STABILIZATION control for the camera image stabilization feature. This control can be used to enable/disable image stabilization. It might get converted to a menu control in future if more options are needed. Signed-off-by: HeungJun Kim Signed-off-by: Sylwester Nawrocki Signed-off-by: Kyungmin Park --- Documentation/DocBook/media/v4l/controls.xml | 10 ++ drivers/media/video/v4l2-ctrls.c |2 ++ include/linux/videodev2.h|1 + 3 files changed, 13 insertions(+) diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml index 0256a02..7468267 100644 --- a/Documentation/DocBook/media/v4l/controls.xml +++ b/Documentation/DocBook/media/v4l/controls.xml @@ -3033,6 +3033,16 @@ control in future, if more options are required. + + V4L2_CID_IMAGE_STABILIZATION + boolean + + + Enables or disables image stabilization. + + + + diff --git a/drivers/media/video/v4l2-ctrls.c b/drivers/media/video/v4l2-ctrls.c index 8b47c05..406916a 100644 --- a/drivers/media/video/v4l2-ctrls.c +++ b/drivers/media/video/v4l2-ctrls.c @@ -615,6 +615,7 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_AUTO_EXPOSURE_BIAS: return "Auto Exposure, Bias"; case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE: return "White Balance, Auto & Preset"; case V4L2_CID_WIDE_DYNAMIC_RANGE: return "Wide Dynamic Range"; + case V4L2_CID_IMAGE_STABILIZATION: return "Image Stabilization"; /* FM Radio Modulator control */ /* Keep the order of the 'case's the same as in videodev2.h! */ @@ -707,6 +708,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE: case V4L2_CID_MPEG_VIDEO_MPEG4_QPEL: case V4L2_CID_WIDE_DYNAMIC_RANGE: + case V4L2_CID_IMAGE_STABILIZATION: *type = V4L2_CTRL_TYPE_BOOLEAN; *min = 0; *max = *step = 1; diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 8964ebc..9b5fe8a 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h @@ -1710,6 +1710,7 @@ enum v4l2_auto_n_preset_white_balance { }; #define V4L2_CID_WIDE_DYNAMIC_RANGE(V4L2_CID_CAMERA_CLASS_BASE+21) +#define V4L2_CID_IMAGE_STABILIZATION (V4L2_CID_CAMERA_CLASS_BASE+22) /* FM Modulator class control IDs */ #define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900) -- 1.7.10 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH/RFC v4 04/12] V4L: Add camera wide dynamic range control
Add V4L2_CID_WIDE_DYNAMIC_RANGE camera class control for the camera wide dynamic range (WDR, HDR) feature. This control can be used to enable/disable wide dynamic range. It might get converted to a menu control in future if more options are needed. Signed-off-by: HeungJun Kim Signed-off-by: Sylwester Nawrocki Signed-off-by: Kyungmin Park --- Documentation/DocBook/media/v4l/controls.xml | 15 +++ drivers/media/video/v4l2-ctrls.c |2 ++ include/linux/videodev2.h|2 ++ 3 files changed, 19 insertions(+) diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml index e3f9277..0256a02 100644 --- a/Documentation/DocBook/media/v4l/controls.xml +++ b/Documentation/DocBook/media/v4l/controls.xml @@ -3018,6 +3018,21 @@ sky. It corresponds approximately to 9000...1 K color temperature. + + V4L2_CID_WIDE_DYNAMIC_RANGE + boolean + + + Enables or disables the camera's wide dynamic +range feature. This feature allows to obtain clear images in situations where +intensity of the illumination varies significantly throughout the scene, i.e. +there are simultaneously very dark and very bright areas. It is most commonly +realized in cameras by combining two subsequent frames with different exposure +times. This control may be changed to a menu +control in future, if more options are required. + + + diff --git a/drivers/media/video/v4l2-ctrls.c b/drivers/media/video/v4l2-ctrls.c index 02fa9b0..8b47c05 100644 --- a/drivers/media/video/v4l2-ctrls.c +++ b/drivers/media/video/v4l2-ctrls.c @@ -614,6 +614,7 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_IRIS_RELATIVE:return "Iris, Relative"; case V4L2_CID_AUTO_EXPOSURE_BIAS: return "Auto Exposure, Bias"; case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE: return "White Balance, Auto & Preset"; + case V4L2_CID_WIDE_DYNAMIC_RANGE: return "Wide Dynamic Range"; /* FM Radio Modulator control */ /* Keep the order of the 'case's the same as in videodev2.h! */ @@ -705,6 +706,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, case V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM: case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE: case V4L2_CID_MPEG_VIDEO_MPEG4_QPEL: + case V4L2_CID_WIDE_DYNAMIC_RANGE: *type = V4L2_CTRL_TYPE_BOOLEAN; *min = 0; *max = *step = 1; diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 1460419..8964ebc 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h @@ -1709,6 +1709,8 @@ enum v4l2_auto_n_preset_white_balance { V4L2_WHITE_BALANCE_SHADE= 9, }; +#define V4L2_CID_WIDE_DYNAMIC_RANGE(V4L2_CID_CAMERA_CLASS_BASE+21) + /* FM Modulator class control IDs */ #define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900) #define V4L2_CID_FM_TX_CLASS (V4L2_CTRL_CLASS_FM_TX | 1) -- 1.7.10 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH/RFC v4 07/12] V4L: Add camera exposure metering control
The V4L2_CID_EXPOSURE_METERING control allows to determine a method used by the camera for measuring the amount of light available for automatic exposure. Signed-off-by: Sylwester Nawrocki Signed-off-by: Kyungmin Park --- Documentation/DocBook/media/v4l/controls.xml | 29 ++ drivers/media/video/v4l2-ctrls.c | 10 + include/linux/videodev2.h|7 +++ 3 files changed, 46 insertions(+) diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml index 1300901..3cd6972 100644 --- a/Documentation/DocBook/media/v4l/controls.xml +++ b/Documentation/DocBook/media/v4l/controls.xml @@ -2790,6 +2790,35 @@ exposure time and/or aperture. + + V4L2_CID_EXPOSURE_METERING + enum v4l2_exposure_metering + Determines how the camera measures +the amount of light available for the frame exposure. Possible values are: + + + + + + V4L2_EXPOSURE_METERING_AVERAGE + Use the light information coming from the entire frame +and average giving no weighting to any particular portion of the metered area. + + + + V4L2_EXPOSURE_METERING_CENTER_WEIGHTED + Average the light information coming from the entire frame +giving priority to the center of the metered area. + + + V4L2_EXPOSURE_METERING_SPOT + Measure only very small area at the center of the frame. + + + + + + V4L2_CID_PAN_RELATIVE integer diff --git a/drivers/media/video/v4l2-ctrls.c b/drivers/media/video/v4l2-ctrls.c index b70226e..350c745 100644 --- a/drivers/media/video/v4l2-ctrls.c +++ b/drivers/media/video/v4l2-ctrls.c @@ -230,6 +230,12 @@ const char * const *v4l2_ctrl_get_menu(u32 id) "Aperture Priority Mode", NULL }; + static const char * const camera_exposure_metering[] = { + "Average", + "Center Weighted", + "Spot", + NULL + }; static const char * const colorfx[] = { "None", "Black & White", @@ -428,6 +434,8 @@ const char * const *v4l2_ctrl_get_menu(u32 id) return camera_power_line_frequency; case V4L2_CID_EXPOSURE_AUTO: return camera_exposure_auto; + case V4L2_CID_EXPOSURE_METERING: + return camera_exposure_metering; case V4L2_CID_COLORFX: return colorfx; case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE: @@ -625,6 +633,7 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_IMAGE_STABILIZATION: return "Image Stabilization"; case V4L2_CID_ISO_SENSITIVITY: return "ISO Sensitivity"; case V4L2_CID_ISO_SENSITIVITY_AUTO: return "ISO Sensitivity, Auto"; + case V4L2_CID_EXPOSURE_METERING:return "Exposure, Metering Mode"; /* FM Radio Modulator control */ /* Keep the order of the 'case's the same as in videodev2.h! */ @@ -765,6 +774,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE: case V4L2_CID_JPEG_CHROMA_SUBSAMPLING: case V4L2_CID_ISO_SENSITIVITY_AUTO: + case V4L2_CID_EXPOSURE_METERING: *type = V4L2_CTRL_TYPE_MENU; break; case V4L2_CID_RDS_TX_PS_NAME: diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 993af23..4fb1d0f 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h @@ -1719,6 +1719,13 @@ enum v4l2_iso_sensitivity_auto_type { V4L2_ISO_SENSITIVITY_AUTO = 1, }; +#define V4L2_CID_EXPOSURE_METERING (V4L2_CID_CAMERA_CLASS_BASE+25) +enum v4l2_exposure_metering { + V4L2_EXPOSURE_METERING_AVERAGE = 0, + V4L2_EXPOSURE_METERING_CENTER_WEIGHTED = 1, + V4L2_EXPOSURE_METERING_SPOT = 2, +}; + /* FM Modulator class control IDs */ #define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900) #define V4L2_CID_FM_TX_CLASS (V4L2_CTRL_CLASS_FM_TX | 1) -- 1.7.10 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH/RFC v4 10/12] V4L: Add auto focus targets to the selections API
The camera automatic focus algorithms may require setting up a spot or rectangle coordinates or multiple such parameters. The automatic focus selection targets are introduced in order to allow applications to query and set such coordinates. Those selections are intended to be used together with the automatic focus controls available in the camera control class. Signed-off-by: Sylwester Nawrocki Signed-off-by: Kyungmin Park --- Documentation/DocBook/media/v4l/selection-api.xml | 33 +++- .../DocBook/media/v4l/vidioc-g-selection.xml | 11 +++ include/linux/videodev2.h |5 +++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/Documentation/DocBook/media/v4l/selection-api.xml b/Documentation/DocBook/media/v4l/selection-api.xml index b299e47..490d29a 100644 --- a/Documentation/DocBook/media/v4l/selection-api.xml +++ b/Documentation/DocBook/media/v4l/selection-api.xml @@ -1,6 +1,6 @@ - Experimental API for cropping, composing and scaling + Experimental selections API Experimental @@ -9,6 +9,10 @@ interface and may change in the future. + + + Image cropping, composing and scaling + Introduction @@ -321,5 +325,32 @@ V4L2_BUF_TYPE_VIDEO_OUTPUT for other devices + + + + Automatic focus regions of interest + + The camera automatic focus algorithms may require configuration of +regions of interest in form of rectangle or spot coordinates. The automatic +focus selection targets allow applications to query and set such coordinates. +Those selections are intended to be used together with the +V4L2_CID_AUTO_FOCUS_AREA +camera class control. The V4L2_SEL_TGT_AUTO_FOCUS_ACTUAL + target is used for querying or setting actual spot or rectangle +coordinates, while V4L2_SEL_TGT_AUTO_FOCUS_BOUNDS target +determines bounds for a single spot or rectangle. +These selections are only effective when the V4L2_CID_AUTO_FOCUS_AREA +control is set to V4L2_AUTO_FOCUS_AREA_SPOT or +V4L2_AUTO_FOCUS_AREA_RECTANGLE. The new coordinates shall +be accepted and applied to hardware when the focus area control value is +changed and also during a &VIDIOC-S-SELECTION; ioctl call, only when the focus +area control is already set to required value. + + For the V4L2_AUTO_FOCUS_AREA_SPOT case, the selection +rectangle width and height +are not used, i.e. shall be set to 0 by applications and ignored by drivers for +the &VIDIOC-S-SELECTION; ioctl and shall be ignored by applications for the +&VIDIOC-G-SELECTION; ioctl. + diff --git a/Documentation/DocBook/media/v4l/vidioc-g-selection.xml b/Documentation/DocBook/media/v4l/vidioc-g-selection.xml index bb04eff..87df4da 100644 --- a/Documentation/DocBook/media/v4l/vidioc-g-selection.xml +++ b/Documentation/DocBook/media/v4l/vidioc-g-selection.xml @@ -195,6 +195,17 @@ exist no rectangle that satisfies the constraints. 0x0103 The active area and all padding pixels that are inserted or modified by hardware. + +V4L2_SEL_TGT_AUTO_FOCUS_ACTUAL +0x1000 + Actual automatic focus rectangle or spot coordinates. + + +V4L2_SEL_TGT_AUTO_FOCUS_BOUNDS +0x1002 +Bounds of the automatic focus region of interest. + + diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index c1fae94..6bfd6c5 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h @@ -777,6 +777,11 @@ struct v4l2_crop { /* Current composing area plus all padding pixels */ #define V4L2_SEL_TGT_COMPOSE_PADDED0x0103 +/* Auto focus region of interest */ +#define V4L2_SEL_TGT_AUTO_FOCUS_ACTUAL 0x1000 +/* Auto focus region (spot coordinates) bounds */ +#define V4L2_SEL_TGT_AUTO_FOCUS_BOUNDS 0x1001 + /** * struct v4l2_selection - selection info * @type: buffer type (do not use *_MPLANE types) -- 1.7.10 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH/RFC v4 08/12] V4L: Add camera scene mode control
Add control for the scene mode feature available in image sensor with more advanced ISP firmware. The V4L2_CID_SCENE_MODE menu control allows to select a set of parameters or a specific image processing and capture control algorithm optimized for common image capture conditions. Signed-off-by: HeungJun Kim Signed-off-by: Sylwester Nawrocki Signed-off-by: Kyungmin Park --- Documentation/DocBook/media/v4l/controls.xml | 117 ++ drivers/media/video/v4l2-ctrls.c | 21 + include/linux/videodev2.h| 18 3 files changed, 156 insertions(+) diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml index 3cd6972..88608f6 100644 --- a/Documentation/DocBook/media/v4l/controls.xml +++ b/Documentation/DocBook/media/v4l/controls.xml @@ -3110,6 +3110,123 @@ sensitivity adjustments. + + V4L2_CID_SCENE_MODE + enum v4l2_scene_mode + This control allows to select +scene programs as the camera automatic modes optimized for common shooting +scenes. Within these modes the camera determines best exposure, aperture, +focusing, light metering, white balance and equivalent sensitivity. The +controls of those parameters are influenced by the scene mode control. +An exact behavior in each mode is subject to the camera specification. + +When the scene mode feature is not used, this control should be set to +V4L2_SCENE_MODE_NONE to make sure the other possibly +related controls are accessible. The following scene programs are defined: + + + + + + + + V4L2_SCENE_MODE_NONE + The scene mode feature is disabled. + + + V4L2_SCENE_MODE_BACKLIGHT + Backlight. Compensates for dark shadows when light is + coming from behind a subject, also by automatically turning + on the flash. + + + V4L2_SCENE_MODE_BEACH_SNOW + Beach and snow. This mode compensates for all-white or +bright scenes, which tend to look gray and low contrast, when camera's automatic +exposure is based on an average scene brightness. To compensate, this mode +automatically slightly overexposes the frames. The white balance may also be +adjusted to compensate for the fact that reflected snow looks bluish rather +than white. + + + V4L2_SCENE_MODE_CANDLELIGHT + Candle light. The camera generally raises the ISO +sensitivity and lowers the shutter speed. This mode compensates for relatively +close subject in the scene. The flash is disabled in order to preserve the +ambiance of the light. + + + V4L2_SCENE_MODE_DAWN_DUSK + Dawn and dusk. Preserves the colors seen in low +natural light before dusk and after down. The camera may turn off the flash, +and automatically focus at infinity. It will usually boost saturation and +lower the shutter speed. + + + V4L2_SCENE_MODE_FALL_COLORS + Fall colors. Increases saturation and adjusts white +balance for color enhancement. Pictures of autumn leaves get saturated reds +and yellows. + + + V4L2_SCENE_MODE_FIREWORKS + Fireworks. Long exposure times are used to capture +the expanding burst of light from a firework. The camera may invoke image +stabilization. + + + V4L2_SCENE_MODE_LANDSCAPE + Landscape. The camera may choose a small aperture to +provide deep depth of field and long exposure duration to help capture detail +in dim light conditions. The focus is fixed at infinity. Suitable for distant +and wide scenery. + + + V4L2_SCENE_MODE_NIGHT + Night, also known as Night Landscape. Designed for low +light conditions, it preserves detail in the dark areas without blowing out bright +objects. The camera generally sets itself to a medium-to-high ISO sensitivity, +with a relatively long exposure time, and turns flash off. As such, there will be +increased image noise and the possibility of blurred image. + + + V4L2_SCENE_MODE_PARTY_INDOOR + Party and indoor. Designed to capture indoor scenes +that are lit by indoor background lighting as well as the flash. The camera +usually increases ISO sensitivity, and adjusts exposure for the low light +conditions. + + + V4L2_SCENE_MODE_PORTRAIT + Portrait. The camera adjusts the aperture so that the +depth of field is reduced, which helps to isolate the subject against a smooth +bac
[PATCH/RFC v4 12/12] V4L: Add camera auto focus controls
Add following auto focus controls: - V4L2_CID_AUTO_FOCUS_START - single-shot auto focus start - V4L2_CID_AUTO_FOCUS_STOP - single-shot auto focus stop - V4L2_CID_AUTO_FOCUS_STATUS - automatic focus status - V4L2_CID_AUTO_FOCUS_AREA - automatic focus area selection - V4L2_CID_AUTO_FOCUS_DISTANCE - automatic focus scan range selection Signed-off-by: Sylwester Nawrocki Signed-off-by: Kyungmin Park --- Documentation/DocBook/media/v4l/controls.xml | 147 +- drivers/media/video/v4l2-ctrls.c | 31 +- include/linux/videodev2.h| 25 + 3 files changed, 200 insertions(+), 3 deletions(-) diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml index 4a463d3..d8ef71e 100644 --- a/Documentation/DocBook/media/v4l/controls.xml +++ b/Documentation/DocBook/media/v4l/controls.xml @@ -2902,13 +2902,156 @@ negative values towards infinity. This is a write-only control. V4L2_CID_FOCUS_AUTO boolean - Enables automatic focus -adjustments. The effect of manual focus adjustments while this feature + Enables continuous automatic +focus adjustments. The effect of manual focus adjustments while this feature is enabled is undefined, drivers should ignore such requests. + V4L2_CID_AUTO_FOCUS_START + button + Starts single auto focus process. +The effect of setting this control when V4L2_CID_FOCUS_AUTO +is set to TRUE (1) is undefined, drivers should ignore +such requests. + + + + + V4L2_CID_AUTO_FOCUS_STOP + button + Aborts automatic focusing +started with V4L2_CID_AUTO_FOCUS_START control. It is +effective only when the continuous autofocus is disabled, that is when +V4L2_CID_FOCUS_AUTO control is set to FALSE + (0). + + + + + + V4L2_CID_AUTO_FOCUS_STATUS + bitmask + + The automatic focus status. This is a read-only + control. + + + + + + V4L2_AUTO_FOCUS_STATUS_IDLE + Automatic focus is not active. + + + V4L2_AUTO_FOCUS_STATUS_BUSY + Automatic focusing is in progress. + + + V4L2_AUTO_FOCUS_STATUS_REACHED + Focus has been reached. + + + V4L2_AUTO_FOCUS_STATUS_LOST + Focus has been lost. + + + V4L2_AUTO_FOCUS_STATUS_FAILED + Automatic focus has failed, the driver will not + transition from this state until another action is + performed by an application. + + + + + + + + + V4L2_CID_AUTO_FOCUS_RANGE + enum v4l2_auto_focus_range + + Determines auto focus distance range +for which lens may be adjusted. + + + + + + V4L2_AUTO_FOCUS_RANGE_AUTO + The camera automatically selects the focus range. + + + V4L2_AUTO_FOCUS_RANGE_NORMAL + The auto focus normal distance range. It is limited +for best auto focus algorithm performance. + + + V4L2_AUTO_FOCUS_RANGE_MACRO + Macro (close-up) auto focus. The camera will +use minimum possible distance that it is capable of for auto focus. + + + V4L2_AUTO_FOCUS_RANGE_INFINITY + The focus at an object at infinite distance. + + + + + + + + + V4L2_CID_AUTO_FOCUS_AREA + enum v4l2_auto_focus_area + + Determines the area of the frame that +the camera uses for automatic focus. The corresponding coordinates of the +focusing spot or rectangle can be specified and queried using the selection API. +To change the auto focus region of interest applications first select required +mode of this control and then set the rectangle or spot coordinates by means +of the &VIDIOC-SUBDEV-S-SELECTION; or &VIDIOC-S-SELECTION; ioctl. In order to +trigger again an auto focus process with same coordinates applications should +use the V4L2_CID_AUTO_FOCUS_START control. Or alternatively +invoke a &VIDIOC-SUBDEV-S-SELECTION; or a &VIDIOC-S-SELECTION; ioctl again. +In the latter case the new pixel coordinates are applied to hardware only when +the focus area control is set to a value other than +V4L2_AUTO_FOCUS_AREA_ALL. + + + + +
[PATCH/RFC v4 09/12] V4L: Add camera 3A lock control
The V4L2_CID_3A_LOCK bitmask control allows applications to pause or resume the automatic exposure, focus and wite balance adjustments. It can be used, for example, to lock the 3A adjustments right before a still image is captured, for pre-focus, etc. The applications can control each of the algorithms independently, through a corresponding control bit, if driver allows that. Signed-off-by: Sylwester Nawrocki Signed-off-by: Kyungmin Park --- Documentation/DocBook/media/v4l/controls.xml | 39 ++ drivers/media/video/v4l2-ctrls.c |2 ++ include/linux/videodev2.h|5 3 files changed, 46 insertions(+) diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml index 88608f6..4a463d3 100644 --- a/Documentation/DocBook/media/v4l/controls.xml +++ b/Documentation/DocBook/media/v4l/controls.xml @@ -3227,6 +3227,45 @@ lens-distortion correction. + + V4L2_CID_3A_LOCK + bitmask + + + This control locks or unlocks the automatic +focus, exposure and white balance. The automatic adjustments can be paused +independently by setting the corresponding lock bit to 1. The camera then retains +the settings until the lock bit is cleared. The following lock bits are defined: + + + + + + + V4L2_LOCK_EXPOSURE + Automatic exposure adjustments lock. + + + V4L2_LOCK_WHITE_BALANCE + Automatic white balance adjustments lock. + + + V4L2_LOCK_FOCUS + Automatic focus lock. + + + + + +When a given algorithm is not enabled, drivers should ignore requests +to lock it and should return no error. An example might be an application +setting bit V4L2_LOCK_WHITE_BALANCE when the +V4L2_CID_AUTO_WHITE_BALANCE control is set to +FALSE. The value of this control may be changed +by exposure, white balance or focus controls. + + + diff --git a/drivers/media/video/v4l2-ctrls.c b/drivers/media/video/v4l2-ctrls.c index 386f20c..6346978 100644 --- a/drivers/media/video/v4l2-ctrls.c +++ b/drivers/media/video/v4l2-ctrls.c @@ -654,6 +654,7 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_ISO_SENSITIVITY_AUTO: return "ISO Sensitivity, Auto"; case V4L2_CID_EXPOSURE_METERING:return "Exposure, Metering Mode"; case V4L2_CID_SCENE_MODE: return "Scene Mode"; + case V4L2_CID_3A_LOCK: return "3A Lock"; /* FM Radio Modulator control */ /* Keep the order of the 'case's the same as in videodev2.h! */ @@ -826,6 +827,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, break; case V4L2_CID_FLASH_FAULT: case V4L2_CID_JPEG_ACTIVE_MARKER: + case V4L2_CID_3A_LOCK: *type = V4L2_CTRL_TYPE_BITMASK; break; case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE: diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index c672c13..c1fae94 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h @@ -1744,6 +1744,11 @@ enum v4l2_scene_mode { V4L2_SCENE_MODE_TEXT= 13, }; +#define V4L2_CID_3A_LOCK (V4L2_CID_CAMERA_CLASS_BASE+27) +#define V4L2_LOCK_EXPOSURE (1 << 0) +#define V4L2_LOCK_WHITE_BALANCE(1 << 1) +#define V4L2_LOCK_FOCUS(1 << 2) + /* FM Modulator class control IDs */ #define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900) #define V4L2_CID_FM_TX_CLASS (V4L2_CTRL_CLASS_FM_TX | 1) -- 1.7.10 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH/RFC v4 11/12] V4L: Add auto focus targets to the subdev selections API
Signed-off-by: Sylwester Nawrocki Signed-off-by: Kyungmin Park --- Documentation/DocBook/media/v4l/dev-subdev.xml | 27 +++- .../media/v4l/vidioc-subdev-g-selection.xml| 14 -- include/linux/v4l2-subdev.h|4 +++ 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/Documentation/DocBook/media/v4l/dev-subdev.xml b/Documentation/DocBook/media/v4l/dev-subdev.xml index 4afcbbe..8a212c4 100644 --- a/Documentation/DocBook/media/v4l/dev-subdev.xml +++ b/Documentation/DocBook/media/v4l/dev-subdev.xml @@ -277,7 +277,7 @@ - Selections: cropping, scaling and composition + Selections - cropping, scaling and composition Many sub-devices support cropping frames on their input or output pads (or possible even on both). Cropping is used to select the area of @@ -330,6 +330,31 @@ + Selections - regions of interest + + Automatic focus + + The camera automatic focus algorithms may require configuration + of a region or multiple regions of interest in form of rectangle or spot + coordinates. + + A single rectangle of interest is represented in &v4l2-rect; + by the coordinates of the top left corner and the rectangle size. Both + the coordinates and sizes are expressed in pixels. When the + width and height fields of + &v4l2-rect; are set to 0 the selection determines spot coordinates, + rather than a rectangle. + + Auto focus rectangles are reset to their default values when the + output image format is modified. Drivers should use the output image size + as the auto focus rectangle default value, but hardware requirements may + prevent this. + + The auto focus selections on input pads are not defined. + + + + Types of selection targets diff --git a/Documentation/DocBook/media/v4l/vidioc-subdev-g-selection.xml b/Documentation/DocBook/media/v4l/vidioc-subdev-g-selection.xml index 208e9f0..c4ccae5 100644 --- a/Documentation/DocBook/media/v4l/vidioc-subdev-g-selection.xml +++ b/Documentation/DocBook/media/v4l/vidioc-subdev-g-selection.xml @@ -57,8 +57,8 @@ The selections are used to configure various image processing functionality performed by the subdevs which affect the -image size. This currently includes cropping, scaling and -composition. +image size. This currently includes cropping, scaling, composition +and automatic focus regions of interest. The selection API replaces the old subdev crop API. All @@ -114,6 +114,16 @@ 0x0102 Bounds of the compose rectangle. + + V4L2_SUBDEV_SEL_TGT_AUTO_FOCUS_BOUNDS + 0x1000 + Bounds of the automatic focus region of interest. + + + V4L2_SUBDEV_SEL_TGT_AUTO_FOCUS_ACTUAL + 0x1001 + Actual automatic focus rectangle or spot coordinates. + diff --git a/include/linux/v4l2-subdev.h b/include/linux/v4l2-subdev.h index 812019e..49b1f14 100644 --- a/include/linux/v4l2-subdev.h +++ b/include/linux/v4l2-subdev.h @@ -136,6 +136,10 @@ struct v4l2_subdev_frame_interval_enum { /* composing bounds */ #define V4L2_SUBDEV_SEL_TGT_COMPOSE_BOUNDS 0x0102 +/* auto focus region of interest */ +#define V4L2_SUBDEV_SEL_TGT_AUTO_FOCUS_ACTUAL 0x1000 +/* auto focus region (spot coordinates) bounds */ +#define V4L2_SUBDEV_SEL_TGT_AUTO_FOCUS_BOUNDS 0x1001 /** * struct v4l2_subdev_selection - selection info -- 1.7.10 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH/RFC v4 06/12] V4L: Add camera ISO sensitivity controls
Add ISO sensitivity and ISO auto/manual controls. The sensitivity values are related to level of amplification of the analog signal between image sensor and ADC. These controls allow to support sensors exposing an interface to accept the ISO values directly. Signed-off-by: Sylwester Nawrocki Signed-off-by: Kyungmin Park --- Documentation/DocBook/media/v4l/biblio.xml | 11 Documentation/DocBook/media/v4l/controls.xml | 38 ++ drivers/media/video/v4l2-ctrls.c | 11 include/linux/videodev2.h|7 + 4 files changed, 67 insertions(+) diff --git a/Documentation/DocBook/media/v4l/biblio.xml b/Documentation/DocBook/media/v4l/biblio.xml index 7dc65c5..66a0ef2 100644 --- a/Documentation/DocBook/media/v4l/biblio.xml +++ b/Documentation/DocBook/media/v4l/biblio.xml @@ -197,4 +197,15 @@ in the frequency range from 87,5 to 108,0 MHz NTSC-4: United States RBDS Standard + + ISO 12232:2006 + + International Organization for Standardization +(http://www.iso.org";>http://www.iso.org) + + Photography — Digital still cameras — Determination + of exposure index, ISO speed ratings, standard output sensitivity, and + recommended exposure index + + diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml index 7468267..1300901 100644 --- a/Documentation/DocBook/media/v4l/controls.xml +++ b/Documentation/DocBook/media/v4l/controls.xml @@ -3043,6 +3043,44 @@ control in future, if more options are required. + + V4L2_CID_ISO_SENSITIVITY + integer menu + Determines ISO equivalent of an +image sensor indicating the sensor's sensitivity to light. The numbers are +expressed in arithmetic scale, as per standard, +where doubling the sensor sensitivity is represented by doubling the numerical +ISO value. Applications should interpret the values as standard ISO values +multiplied by 1000, e.g. control value 800 stands for ISO 0.8. Drivers will +usually support only a subset of standard ISO values. The effect of setting +this control while the V4L2_CID_ISO_SENSITIVITY_AUTO +control is set to a value other than V4L2_CID_ISO_SENSITIVITY_MANUAL + is undefined, drivers should ignore such requests. + + + + + V4L2_CID_ISO_SENSITIVITY_AUTO + enum v4l2_iso_sensitivity_type + Enables or disables automatic ISO +sensitivity adjustments. + + + + + + V4L2_CID_ISO_SENSITIVITY_MANUAL + Manual ISO sensitivity. + + + V4L2_CID_ISO_SENSITIVITY_AUTO + Automatic ISO sensitivity adjustments. + + + + + + diff --git a/drivers/media/video/v4l2-ctrls.c b/drivers/media/video/v4l2-ctrls.c index 406916a..b70226e 100644 --- a/drivers/media/video/v4l2-ctrls.c +++ b/drivers/media/video/v4l2-ctrls.c @@ -256,6 +256,11 @@ const char * const *v4l2_ctrl_get_menu(u32 id) "Shade", NULL, }; + static const char * const camera_iso_sensitivity_auto[] = { + "Manual", + "Auto", + NULL + }; static const char * const tune_preemphasis[] = { "No Preemphasis", "50 Microseconds", @@ -427,6 +432,8 @@ const char * const *v4l2_ctrl_get_menu(u32 id) return colorfx; case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE: return auto_n_preset_white_balance; + case V4L2_CID_ISO_SENSITIVITY_AUTO: + return camera_iso_sensitivity_auto; case V4L2_CID_TUNE_PREEMPHASIS: return tune_preemphasis; case V4L2_CID_FLASH_LED_MODE: @@ -616,6 +623,8 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE: return "White Balance, Auto & Preset"; case V4L2_CID_WIDE_DYNAMIC_RANGE: return "Wide Dynamic Range"; case V4L2_CID_IMAGE_STABILIZATION: return "Image Stabilization"; + case V4L2_CID_ISO_SENSITIVITY: return "ISO Sensitivity"; + case V4L2_CID_ISO_SENSITIVITY_AUTO: return "ISO Sensitivity, Auto"; /* FM Radio Modulator control */ /* Keep the order of the 'case's the same as in videodev2.h! */ @@ -755,12 +764,14 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL: case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE: case V4L2_CID_JPEG_CHROMA_SUBSAMPLING: + case V4L2_CID_ISO_SENSITIVITY_AUTO: *type = V4L2_CTRL_TYPE_MENU; break; case V4L2_CID_RDS_TX_PS_NAME: case V4L2_CID_RDS_TX_RADIO_TEXT: *type = V4L2_CTRL_TYPE
[PATCH/RFC v4 02/12] V4L: Add camera exposure bias control
The camera may in some conditions incorrectly determine the exposure, and a manual automatic exposure correction may be needed. This patch adds V4L2_CID_AUTO_EXPOSURE_BIAS control which allows to add some offset in the automatic exposure control loop, to compensate for frame under- or over-exposure. Signed-off-by: Sylwester Nawrocki Signed-off-by: Kyungmin Park --- Documentation/DocBook/media/v4l/controls.xml | 16 drivers/media/video/v4l2-ctrls.c |4 include/linux/videodev2.h|2 ++ 3 files changed, 22 insertions(+) diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml index 5e12257..612009f 100644 --- a/Documentation/DocBook/media/v4l/controls.xml +++ b/Documentation/DocBook/media/v4l/controls.xml @@ -2775,6 +2775,22 @@ remain constant. + V4L2_CID_EXPOSURE_BIAS + integer menu + Determines the automatic +exposure compensation, it is effective only when V4L2_CID_EXPOSURE_AUTO +control is set to AUTO, SHUTTER_PRIORITY +or APERTURE_PRIORITY. +It is expressed in terms of EV, drivers should interpret the values as 0.001 EV +units, where the value 1000 stands for +1 EV. +Increasing the exposure compensation value is equivalent to decreasing +the exposure value (EV) and will increase the amount of light at the image +sensor. The camera performs the exposure compensation by adjusting absolute +exposure time and/or aperture. + + + + V4L2_CID_PAN_RELATIVE integer This control turns the diff --git a/drivers/media/video/v4l2-ctrls.c b/drivers/media/video/v4l2-ctrls.c index e0725b5..1d7091f 100644 --- a/drivers/media/video/v4l2-ctrls.c +++ b/drivers/media/video/v4l2-ctrls.c @@ -597,6 +597,7 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_PRIVACY: return "Privacy"; case V4L2_CID_IRIS_ABSOLUTE:return "Iris, Absolute"; case V4L2_CID_IRIS_RELATIVE:return "Iris, Relative"; + case V4L2_CID_AUTO_EXPOSURE_BIAS: return "Auto Exposure, Bias"; /* FM Radio Modulator control */ /* Keep the order of the 'case's the same as in videodev2.h! */ @@ -739,6 +740,9 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, case V4L2_CID_RDS_TX_RADIO_TEXT: *type = V4L2_CTRL_TYPE_STRING; break; + case V4L2_CID_AUTO_EXPOSURE_BIAS: + *type = V4L2_CTRL_TYPE_INTEGER_MENU; + break; case V4L2_CID_USER_CLASS: case V4L2_CID_CAMERA_CLASS: case V4L2_CID_MPEG_CLASS: diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 5a09ac3..da60cbb 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h @@ -1693,6 +1693,8 @@ enum v4l2_exposure_auto_type { #define V4L2_CID_IRIS_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+17) #define V4L2_CID_IRIS_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+18) +#define V4L2_CID_AUTO_EXPOSURE_BIAS(V4L2_CID_CAMERA_CLASS_BASE+19) + /* FM Modulator class control IDs */ #define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900) #define V4L2_CID_FM_TX_CLASS (V4L2_CTRL_CLASS_FM_TX | 1) -- 1.7.10 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH/RFC v4 03/12] V4L: Add an extended camera white balance control
This patch adds V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE control which is an extended version of the V4L2_CID_AUTO_WHITE_BALANCE control, including white balance presets. The following presets are defined: - V4L2_WHITE_BALANCE_INCANDESCENT, - V4L2_WHITE_BALANCE_FLUORESCENT, - V4L2_WHITE_BALANCE_FLUORESCENT_H, - V4L2_WHITE_BALANCE_HORIZON, - V4L2_WHITE_BALANCE_DAYLIGHT, - V4L2_WHITE_BALANCE_FLASH, - V4L2_WHITE_BALANCE_CLOUDY, - V4L2_WHITE_BALANCE_SHADE. Signed-off-by: HeungJun Kim Signed-off-by: Sylwester Nawrocki Signed-off-by: Kyungmin Park Acked-by: Hans de Goede --- Documentation/DocBook/media/v4l/controls.xml | 70 ++ drivers/media/video/v4l2-ctrls.c | 17 +++ include/linux/videodev2.h| 14 ++ 3 files changed, 101 insertions(+) diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml index 612009f..e3f9277 100644 --- a/Documentation/DocBook/media/v4l/controls.xml +++ b/Documentation/DocBook/media/v4l/controls.xml @@ -2948,6 +2948,76 @@ camera sensor on or off, or specify its strength. Such band-stop filters can be used, for example, to filter out the fluorescent light component. + + + V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE + enum v4l2_auto_n_preset_white_balance + Sets white balance to automatic, +manual or a preset. The presets determine color temperature of the light as +a hint to the camera for white balance adjustments resulting in most accurate +color representation. The following white balance presets are listed in order +of increasing color temperature. + + + + + + V4L2_WHITE_BALANCE_MANUAL + Manual white balance. + + + V4L2_WHITE_BALANCE_AUTO + Automatic white balance adjustments. + + + V4L2_WHITE_BALANCE_INCANDESCENT + White balance setting for incandescent (tungsten) lighting. +It generally cools down the colors and corresponds approximately to 2500...3500 K +color temperature range. + + + V4L2_WHITE_BALANCE_FLUORESCENT + White balance preset for fluorescent lighting. +It corresponds approximately to 4000...5000 K color temperature. + + + V4L2_WHITE_BALANCE_FLUORESCENT_H + With this setting the camera will compensate for +fluorescent H lighting. + + + V4L2_WHITE_BALANCE_HORIZON + White balance setting for horizon daylight. +It corresponds approximately to 5000 K color temperature. + + + V4L2_WHITE_BALANCE_DAYLIGHT + White balance preset for daylight (with clear sky). +It corresponds approximately to 5000...6500 K color temperature. + + + V4L2_WHITE_BALANCE_FLASH + With this setting the camera will compensate for the flash +light. It slightly warms up the colors and corresponds roughly to 5000...5500 K +color temperature. + + + V4L2_WHITE_BALANCE_CLOUDY + White balance preset for moderately overcast sky. +This option corresponds approximately to 6500...8000 K color temperature +range. + + + V4L2_WHITE_BALANCE_SHADE + White balance preset for shade or heavily overcast +sky. It corresponds approximately to 9000...1 K color temperature. + + + + + + + diff --git a/drivers/media/video/v4l2-ctrls.c b/drivers/media/video/v4l2-ctrls.c index 1d7091f..02fa9b0 100644 --- a/drivers/media/video/v4l2-ctrls.c +++ b/drivers/media/video/v4l2-ctrls.c @@ -243,6 +243,19 @@ const char * const *v4l2_ctrl_get_menu(u32 id) "Vivid", NULL }; + static const char * const auto_n_preset_white_balance[] = { + "Manual", + "Auto", + "Incandescent", + "Fluorescent", + "Fluorescent H", + "Horizon", + "Daylight", + "Flash", + "Cloudy", + "Shade", + NULL, + }; static const char * const tune_preemphasis[] = { "No Preemphasis", "50 Microseconds", @@ -412,6 +425,8 @@ const char * const *v4l2_ctrl_get_menu(u32 id) return camera_exposure_auto; case V4L2_CID_COLORFX: return colorfx; + case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE: + return auto_n_preset_white_balance; case V4L2_CID_TUNE_PREEMPHASIS:
[PATCH/RFC v4 00/13] V4L: camera control enhancements
Here is one more update of the camera class controls change set. Changes since v3, these are mainly corrections after comments from Hans (thank you!): - V4L2_CID_IMAGE_STABILIZATION and V4L2_CID_WIDE_DYNAMIC_RANGE controls type reverted back to boolean, added a note in the documentation that these controls may be converted to menu controls in future; - Added description for new integer menu control helpers to Documentation/video4linux/v4l2-controls.txt - edited V4L2_CID_3A_LOCK control's description; - removed the vivi patch from the series; Comments are welcome. If there is no more major corrections required I'd like to send a pull request next week for the following: V4L: Add helper function for standard integer menu controls V4L: Add camera exposure bias control V4L: Add an extended camera white balance control V4L: Add camera wide dynamic range control V4L: Add camera image stabilization control V4L: Add camera ISO sensitivity controls V4L: Add camera exposure metering control V4L: Add camera scene mode control V4L: Add camera 3A lock control and after there is an agreement on how to handle the enums in the V4L2 API, since some of the above patches depend on the new integer menu control type addition. Changes since v2: - V4L2_CID_WHITE_BALANCE_PRESET replaced with V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE according to suggestions from Hans de Goede; - added Flurescent H white balance preset; - V4L2_CID_IMAGE_STABILIZATION and V4L2_CID_WIDE_DYNAMIC_RANGE controls type changed from boolean to menu, to make any further extensions of these controls easier; I'm just not 100% sure if V4L2_WIDE_DYNAMIC_RANGE_ENABLED and V4L2_IMAGE_STABILIZATION_ENABLED are good names for cases where the camera doesn't support wide dynamic range or image stabilization technique selection and only allows to enable or disable those algorithms; - V4L2_CID_ISO_SENSITIVITY_AUTO control type changed from boolean to menu in order to support ISO presets; currently enum v4l2_iso_sensitivity_auto_type does not contain any presets though; - V4L2_CID_COLORFX patch removed from this series; - updated vivi and s5c73m3 driver patches. Changes since v1 (implicit): - the V4L2_CID_AUTO_FOCUS_FACE_PRIORITY control merged with V4L2_CID_AUTO_FOCUS_FACE_AREA, - many minor documentation corrections, - removed "08/23 V4L: camera control class..." patch, which got accidentally added at v1, - added V4L2_CID_SCENE_MODE and V4L2_CID_3A_LOCK controls, - added vivi patch for testing. The patches will be also available in few hours in git repository at: http://git.infradead.org/users/kmpark/linux-samsung/shortlog/refs/heads/v4l-camera-controls Regards, Sylwester Sylwester Nawrocki (12): V4L: Add helper function for standard integer menu controls V4L: Add camera exposure bias control V4L: Add an extended camera white balance control V4L: Add camera wide dynamic range control V4L: Add camera image stabilization control V4L: Add camera ISO sensitivity controls V4L: Add camera exposure metering control V4L: Add camera scene mode control V4L: Add camera 3A lock control V4L: Add auto focus targets to the selections API V4L: Add auto focus targets to the subdev selections API V4L: Add camera auto focus controls Documentation/DocBook/media/v4l/biblio.xml | 11 + Documentation/DocBook/media/v4l/controls.xml | 481 +++- Documentation/DocBook/media/v4l/dev-subdev.xml | 27 +- Documentation/DocBook/media/v4l/selection-api.xml | 33 +- .../DocBook/media/v4l/vidioc-g-selection.xml | 11 + .../media/v4l/vidioc-subdev-g-selection.xml| 14 +- Documentation/video4linux/v4l2-controls.txt| 22 + drivers/media/video/v4l2-ctrls.c | 121 - include/linux/v4l2-subdev.h|4 + include/linux/videodev2.h | 86 include/media/v4l2-ctrls.h | 17 + 11 files changed, 820 insertions(+), 7 deletions(-) -- 1.7.10 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
cron job: media_tree daily build: WARNINGS
This message is generated daily by a cron job that builds media_tree for the kernels and architectures in the list below. Results of the daily build of media_tree: date:Fri May 4 19:00:19 CEST 2012 git hash:a1ac5dc28d2b4ca78e183229f7c595ffd725241c gcc version: i686-linux-gcc (GCC) 4.6.3 host hardware:x86_64 host os: 3.1-2.slh.1-amd64 linux-git-arm-eabi-exynos: WARNINGS linux-git-arm-eabi-omap: WARNINGS linux-git-armv5-ixp: WARNINGS linux-git-i686: OK linux-git-m32r: OK linux-git-mips: WARNINGS linux-git-powerpc64: OK linux-git-x86_64: WARNINGS linux-2.6.31.12-i686: WARNINGS linux-2.6.32.6-i686: WARNINGS linux-2.6.33-i686: WARNINGS linux-2.6.34-i686: WARNINGS linux-2.6.35.3-i686: WARNINGS linux-2.6.36-i686: WARNINGS linux-2.6.37-i686: WARNINGS linux-2.6.38.2-i686: WARNINGS linux-2.6.39.1-i686: WARNINGS linux-3.0-i686: OK linux-3.1-i686: OK linux-3.2.1-i686: OK linux-3.3-i686: WARNINGS linux-2.6.31.12-x86_64: WARNINGS linux-2.6.32.6-x86_64: WARNINGS linux-2.6.33-x86_64: WARNINGS linux-2.6.34-x86_64: WARNINGS linux-2.6.35.3-x86_64: WARNINGS linux-2.6.36-x86_64: WARNINGS linux-2.6.37-x86_64: WARNINGS linux-2.6.38.2-x86_64: WARNINGS linux-2.6.39.1-x86_64: WARNINGS linux-3.0-x86_64: WARNINGS linux-3.1-x86_64: WARNINGS linux-3.2.1-x86_64: WARNINGS linux-3.3-x86_64: WARNINGS apps: WARNINGS spec-git: WARNINGS sparse: ERRORS Detailed results are available here: http://www.xs4all.nl/~hverkuil/logs/Friday.log Full logs are available here: http://www.xs4all.nl/~hverkuil/logs/Friday.tar.bz2 The V4L-DVB specification from this daily build is here: http://www.xs4all.nl/~hverkuil/spec/media.html -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] v4l: soc-camera: Add support for enum_frameintervals ioctl
Hi Guennadi, No problem. On Fri, May 4, 2012 at 10:05 AM, Guennadi Liakhovetski wrote: > Hi Sergio > > Sorry about the delay. > > On Wed, 18 Apr 2012, Aguirre, Sergio wrote: > >> From: Sergio Aguirre >> >> Signed-off-by: Sergio Aguirre >> --- >> drivers/media/video/soc_camera.c | 37 >> + >> include/media/soc_camera.h | 1 + >> 2 files changed, 38 insertions(+), 0 deletions(-) >> >> diff --git a/drivers/media/video/soc_camera.c >> b/drivers/media/video/soc_camera.c >> index eb25756..62c8956 100644 >> --- a/drivers/media/video/soc_camera.c >> +++ b/drivers/media/video/soc_camera.c >> @@ -266,6 +266,15 @@ static int soc_camera_enum_fsizes(struct file >> *file, void *fh, >> return ici->ops->enum_fsizes(icd, fsize); >> } >> >> +static int soc_camera_enum_fivals(struct file *file, void *fh, > > "fivals" is a bit short for my taste. Yes, I know about the > *_enum_fsizes() precedent in soc_camera.c, we should have used a more > descriptive name for that too. So, maybe I'll push a patch to change that > to enum_frmsizes() or enum_framesizes(). Agreed. > > But that brings in a larger question, which is also the reason, why I > added a couple more people to the CC: the following 3 operations in struct > v4l2_subdev_video_ops don't make me particularly happy: > > int (*enum_framesizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum > *fsize); > int (*enum_frameintervals)(struct v4l2_subdev *sd, struct > v4l2_frmivalenum *fival); > int (*enum_mbus_fsizes)(struct v4l2_subdev *sd, > struct v4l2_frmsizeenum *fsize); > > The problems are: > > 1. enum_framesizes and enum_mbus_fsizes seem to be identical (yes, I see > my Sob under the latter:-() Yeah, IMHO, the mbus one should go, since there's no mbus specific structure being handed as a parameter. > 2. both struct v4l2_frmsizeenum and struct v4l2_frmivalenum are the > structs, used in the respective V4L2 ioctl()s, and they both contain a > field for a fourcc value, which doesn't make sense to subdevice drivers. > So far the only driver combination in the mainline, that I see, that uses > these operations is marvell-ccic & ov7670. These drivers just ignore the > pixel format. Relatively recently enum_mbus_fsizes() has been added to > soc-camera, and this patch is adding enum_frameintervals(). Both these > implementations abuse the .pixel_format field to pass a media-bus code > value in it to subdevice drivers. This sends meaningful information to > subdevice drivers, but is really a hack, rather than a proper > implementation. True. > > Any idea how to improve this? Shall we create mediabus clones of those > structs with an mbus code instead of fourcc, and drop one of the above > enum_framesizes() operations? Well, to add more confusion to this.. :) We have this v4l2-subdev IOCTLs exported to userspace: #define VIDIOC_SUBDEV_ENUM_FRAME_SIZE \ _IOWR('V', 74, struct v4l2_subdev_frame_size_enum) #define VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL \ _IOWR('V', 75, struct v4l2_subdev_frame_interval_enum) Which in "drivers/media/video/v4l2-subdev.c", are translated to pad ops: - v4l2_subdev_call(... enum_frame_size ...); - v4l2_subdev_call(... enum_frame_interval ...); respectively. So, this is also another thing that's causing some confusion. Does soc_camera use pad ops? Regards, Sergio > > Thanks > Guennadi > >> + struct v4l2_frmivalenum *fival) >> +{ >> + struct soc_camera_device *icd = file->private_data; >> + struct soc_camera_host *ici = to_soc_camera_host(icd->parent); >> + >> + return ici->ops->enum_fivals(icd, fival); >> +} >> + >> static int soc_camera_reqbufs(struct file *file, void *priv, >> struct v4l2_requestbuffers *p) >> { >> @@ -1266,6 +1275,31 @@ static int default_enum_fsizes(struct >> soc_camera_device *icd, >> return 0; >> } >> >> +static int default_enum_fivals(struct soc_camera_device *icd, >> + struct v4l2_frmivalenum *fival) >> +{ >> + int ret; >> + struct v4l2_subdev *sd = soc_camera_to_subdev(icd); >> + const struct soc_camera_format_xlate *xlate; >> + __u32 pixfmt = fival->pixel_format; >> + struct v4l2_frmivalenum fival_sd = *fival; >> + >> + xlate = soc_camera_xlate_by_fourcc(icd, pixfmt); >> + if (!xlate) >> + return -EINVAL; >> + /* map xlate-code to pixel_format, sensor only handle xlate-code*/ >> + fival_sd.pixel_format = xlate->code; >> + >> + ret = v4l2_subdev_call(sd, video, enum_frameintervals, &fival_sd); >> + if (ret < 0) >> + return ret; >> + >> + *fival = fival_sd; >> + fival->pixel_format = pixfmt; >> + >> + return 0; >> +} >> + >> int soc_camera_host_register(struct soc_camera_host *ici) >> { >> struct soc_camera_host *ix; >> @@ -1297,6 +1331,8 @@ int soc_camera_host_register(struct so
[GIT PULL FOR 3.5] s5p-fimc driver updates
Hi Mauro, The following changes since commit 34b2debaa62bfa384ef91b61cf2c40c48e86a5e2: s5p-fimc: Correct memory allocation for VIDIOC_CREATE_BUFS (2012-05-04 17:07:24 +0200) are available in the git repository at: git://git.infradead.org/users/kmpark/linux-samsung v4l-fimc-exynos4x12 for you to fetch changes up to bab96b068afa07105139be09d3830cc9ed580382: s5p-fimc: Use selection API in place of crop operations (2012-05-04 17:18:38 +0200) Sylwester Nawrocki (14): V4L: Extend V4L2_CID_COLORFX with more image effects s5p-fimc: Avoid crash with null platform_data s5p-fimc: Move m2m node driver into separate file s5p-fimc: Use v4l2_subdev internal ops to register video nodes s5p-fimc: Refactor the register interface functions s5p-fimc: Add FIMC-LITE register definitions s5p-fimc: Rework the video pipeline control functions s5p-fimc: Prefix format enumerations with FIMC_FMT_ s5p-fimc: Minor cleanups s5p-fimc: Make sure an interrupt is properly requested s5p-fimc: Add support for Exynos4x12 FIMC-LITE s5p-fimc: Update copyright notices s5p-fimc: Add color effect control s5p-fimc: Use selection API in place of crop operations Documentation/DocBook/media/v4l/compat.xml | 13 + Documentation/DocBook/media/v4l/controls.xml | 98 ++- Documentation/DocBook/media/v4l/v4l2.xml |5 +- drivers/media/video/Kconfig | 24 +- drivers/media/video/s5p-fimc/Kconfig | 48 ++ drivers/media/video/s5p-fimc/Makefile|6 +- drivers/media/video/s5p-fimc/fimc-capture.c | 473 - drivers/media/video/s5p-fimc/fimc-core.c | 1096 +--- drivers/media/video/s5p-fimc/fimc-core.h | 254 ++- drivers/media/video/s5p-fimc/fimc-lite-reg.c | 300 drivers/media/video/s5p-fimc/fimc-lite-reg.h | 150 drivers/media/video/s5p-fimc/fimc-lite.c | 1576 + drivers/media/video/s5p-fimc/fimc-lite.h | 213 ++ drivers/media/video/s5p-fimc/fimc-m2m.c | 820 + drivers/media/video/s5p-fimc/fimc-mdevice.c | 407 +++ drivers/media/video/s5p-fimc/fimc-mdevice.h | 18 +- drivers/media/video/s5p-fimc/fimc-reg.c | 613 drivers/media/video/s5p-fimc/fimc-reg.h | 326 + drivers/media/video/s5p-fimc/regs-fimc.h | 301 drivers/media/video/v4l2-ctrls.c |7 + include/linux/videodev2.h| 29 +- include/media/s5p_fimc.h | 16 + 22 files changed, 4734 insertions(+), 2059 deletions(-) create mode 100644 drivers/media/video/s5p-fimc/Kconfig create mode 100644 drivers/media/video/s5p-fimc/fimc-lite-reg.c create mode 100644 drivers/media/video/s5p-fimc/fimc-lite-reg.h create mode 100644 drivers/media/video/s5p-fimc/fimc-lite.c create mode 100644 drivers/media/video/s5p-fimc/fimc-lite.h create mode 100644 drivers/media/video/s5p-fimc/fimc-m2m.c create mode 100644 drivers/media/video/s5p-fimc/fimc-reg.h delete mode 100644 drivers/media/video/s5p-fimc/regs-fimc.h I have added following 2 patches, from my previous pull request for 3.4-rc (http://patchwork.linuxtv.org/patch/10888/), on top of staging/for_v3.5 as a base for this patch set: 34b2deb s5p-fimc: Correct memory allocation for VIDIOC_CREATE_BUFS 157495a s5p-fimc: Fix locking in subdev set_crop op Regards -- Sylwester Nawrocki Samsung Poland R&D Center -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
GENIUS TV-GO A12 tv analog card
Hi, I add a tv card support for saa7134 driver, the card name is "Genius TV Go A12" and i test the RF capture with pal-nc and I test the composite input too. I want to known if I would make a patch or what i have to do to give us the patch. Here is the code: diff linux-3.3.4/drivers/media/video/saa7134/saa7134-cards.c saa7134/saa7134-cards.c 5715,5750d5714 < [SAA7134_BOARD_GENIUS_TVGO_A12] = { < .name = "GENIUS TV-GO A12", < .audio_clock = 0x00187de7, < .tuner_type = TUNER_PHILIPS_TDA8290, < .radio_type = UNSET, < .tuner_addr = ADDR_UNSET, < .radio_addr = ADDR_UNSET, < .gpiomask = 0x20, < .inputs = {{ < .name = name_tv, < .vmux = 1, < .amux = TV, < .gpio = 0x, < .tv = 1, < },{ < .name = name_tv, < .vmux = 3, < .amux = LINE2, < .tv = 1 < },{ < .name = name_svideo, //TODO: no test < .vmux = 6, < .amux = LINE2, < .gpio = 0x, < }}, < .radio = { < .name = name_radio, < .amux = TV, < .gpio = 0x20, < }, < .mute = { < .name = name_mute, < .gpio = 0x, < }, < < } 6985,6990d6948 < },{ < .vendor = PCI_VENDOR_ID_PHILIPS, < .device = PCI_DEVICE_ID_PHILIPS_SAA7133, < .subvendor = 0x0458, < .subdevice = 0x6008, < .driver_data = SAA7134_BOARD_GENIUS_TVGO_A12, 7029d6986 < /* --- end of list --- */ 7030a6988 > /* --- end of list --- */ 7360d7317 < case SAA7134_BOARD_GENIUS_TVGO_A12: -- Sebastián Misuraca 3waySolutions S.A. TE: 5217-3330 www.3way.com.ar
Re: [PATCH] v4l: soc-camera: Add support for enum_frameintervals ioctl
Hi Sergio Sorry about the delay. On Wed, 18 Apr 2012, Aguirre, Sergio wrote: > From: Sergio Aguirre > > Signed-off-by: Sergio Aguirre > --- > drivers/media/video/soc_camera.c | 37 + > include/media/soc_camera.h |1 + > 2 files changed, 38 insertions(+), 0 deletions(-) > > diff --git a/drivers/media/video/soc_camera.c > b/drivers/media/video/soc_camera.c > index eb25756..62c8956 100644 > --- a/drivers/media/video/soc_camera.c > +++ b/drivers/media/video/soc_camera.c > @@ -266,6 +266,15 @@ static int soc_camera_enum_fsizes(struct file > *file, void *fh, > return ici->ops->enum_fsizes(icd, fsize); > } > > +static int soc_camera_enum_fivals(struct file *file, void *fh, "fivals" is a bit short for my taste. Yes, I know about the *_enum_fsizes() precedent in soc_camera.c, we should have used a more descriptive name for that too. So, maybe I'll push a patch to change that to enum_frmsizes() or enum_framesizes(). But that brings in a larger question, which is also the reason, why I added a couple more people to the CC: the following 3 operations in struct v4l2_subdev_video_ops don't make me particularly happy: int (*enum_framesizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum *fsize); int (*enum_frameintervals)(struct v4l2_subdev *sd, struct v4l2_frmivalenum *fival); int (*enum_mbus_fsizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum *fsize); The problems are: 1. enum_framesizes and enum_mbus_fsizes seem to be identical (yes, I see my Sob under the latter:-() 2. both struct v4l2_frmsizeenum and struct v4l2_frmivalenum are the structs, used in the respective V4L2 ioctl()s, and they both contain a field for a fourcc value, which doesn't make sense to subdevice drivers. So far the only driver combination in the mainline, that I see, that uses these operations is marvell-ccic & ov7670. These drivers just ignore the pixel format. Relatively recently enum_mbus_fsizes() has been added to soc-camera, and this patch is adding enum_frameintervals(). Both these implementations abuse the .pixel_format field to pass a media-bus code value in it to subdevice drivers. This sends meaningful information to subdevice drivers, but is really a hack, rather than a proper implementation. Any idea how to improve this? Shall we create mediabus clones of those structs with an mbus code instead of fourcc, and drop one of the above enum_framesizes() operations? Thanks Guennadi > +struct v4l2_frmivalenum *fival) > +{ > + struct soc_camera_device *icd = file->private_data; > + struct soc_camera_host *ici = to_soc_camera_host(icd->parent); > + > + return ici->ops->enum_fivals(icd, fival); > +} > + > static int soc_camera_reqbufs(struct file *file, void *priv, > struct v4l2_requestbuffers *p) > { > @@ -1266,6 +1275,31 @@ static int default_enum_fsizes(struct > soc_camera_device *icd, > return 0; > } > > +static int default_enum_fivals(struct soc_camera_device *icd, > + struct v4l2_frmivalenum *fival) > +{ > + int ret; > + struct v4l2_subdev *sd = soc_camera_to_subdev(icd); > + const struct soc_camera_format_xlate *xlate; > + __u32 pixfmt = fival->pixel_format; > + struct v4l2_frmivalenum fival_sd = *fival; > + > + xlate = soc_camera_xlate_by_fourcc(icd, pixfmt); > + if (!xlate) > + return -EINVAL; > + /* map xlate-code to pixel_format, sensor only handle xlate-code*/ > + fival_sd.pixel_format = xlate->code; > + > + ret = v4l2_subdev_call(sd, video, enum_frameintervals, &fival_sd); > + if (ret < 0) > + return ret; > + > + *fival = fival_sd; > + fival->pixel_format = pixfmt; > + > + return 0; > +} > + > int soc_camera_host_register(struct soc_camera_host *ici) > { > struct soc_camera_host *ix; > @@ -1297,6 +1331,8 @@ int soc_camera_host_register(struct soc_camera_host > *ici) > ici->ops->get_parm = default_g_parm; > if (!ici->ops->enum_fsizes) > ici->ops->enum_fsizes = default_enum_fsizes; > + if (!ici->ops->enum_fivals) > + ici->ops->enum_fivals = default_enum_fivals; > > mutex_lock(&list_lock); > list_for_each_entry(ix, &hosts, list) { > @@ -1387,6 +1423,7 @@ static const struct v4l2_ioctl_ops > soc_camera_ioctl_ops = { > .vidioc_s_std= soc_camera_s_std, > .vidioc_g_std= soc_camera_g_std, > .vidioc_enum_framesizes = soc_camera_enum_fsizes, > + .vidioc_enum_frameintervals = soc_camera_enum_fivals, > .vidioc_reqbufs = soc_camera_reqbufs, > .vidioc_querybuf = soc_camera_querybuf, > .vidioc_qbuf = soc_camera_qbuf, > diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h > index b5c2b6c..0a3ac07 100644 > --- a/include/media/soc_camera.h >
Re: [PATCH v2] add support for DeLOCK-USB-2.0-DVB-T-Receiver-61744
Il 04/05/2012 03:27, poma ha scritto: > On 05/03/2012 11:03 AM, Gianluca Gennari wrote: >> Hi poma, >> I have a 0BDA:2838 (Easycap EZTV646) and a 0BDA:2832 (no name 20x20mm >> mini DVB-T stick) and both are based on the E4000 tuner, which is not >> supported in the kernel at the moment. >> I have no idea if there are sticks with the same USB PID and the fc0012 >> tuner. > > OK, second one - no name device is "Realtek RTL2832U reference design"**. Just for reference, the "no name device" I bought on ebay is exactly this one: http://i01.i.aliimg.com/photo/v0/513925059/Mini_notebook_USB_DVB_T_Stick_receiver.jpg Tuner: E4000 USB PID: 0BDA:2832 It is listed as "Unikoo UK001T (P160)" on the RTL SDR compatibility list: http://www.reddit.com/r/RTLSDR/comments/s6ddo/rtlsdr_compatibility_list_v2_work_in_progress/ Best regards, Gianluca > > First one: > Once upon a time there was a "EasyCAP"� > "After while crocodile!" > �and "EzCAP" was born. > http://szforwardvideo.en.alibaba.com/aboutus.html > Obviously Easycap EZTV646 != EzCAP EzTV646 > http://www.reddit.com/r/RTLSDR/comments/s6ddo/rtlsdr_compatibility_list_v2_work_in_progress/ > ezcap EzTV646 0BDA:2838 RTL2832U/FC0012 Some revisions may have > the E4000* > http://i.imgur.com/mFD1X.jpg > (Generic) 0BDa:2838 RTL2832U/E4000* > � > And, in addition: > http://sdr.osmocom.org/trac/wiki/rtl-sdr > 0x0bda0x2832 all of them Generic RTL2832U (e.g. hama nano)** > 0x0bda0x2838 E4000 ezcap USB 2.0 DVB-T/DAB/FM dongle > � > Maybe? > https://sites.google.com/site/myrtlsdr/ > "EzCap EZTV646 has got RTL2832U/FC0012. However rtl-sdr must be tweaked > to force FC0012 tuner because it has the same PID as EZTV668 (PID: > 0x2838) so running it whithout a tweak will select Elonics E4000 tuner. > Works, not so good at filtering." > � > Conclusion: > At least two devices share same vid/pid with different tuners - fc0012 > vs e4000. > How to resolve this from a drivers perspective in a proper way? > > Beside, > there is GPL'ed 'e4k' tuner source code aka 'e4000 improved'*** (Elonics > E4000) > by Harald Welte > http://cgit.osmocom.org/cgit/osmo-sdr/tree/firmware/src/tuner_e4k.c > http://sdr.osmocom.org/trac/ > http://sdr.osmocom.org/trac/wiki/rtl-sdr > http://wiki.spench.net/wiki/RTL2832U*** > > regards, > poma > -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2] add support for DeLOCK-USB-2.0-DVB-T-Receiver-61744
Hi poma, thanks for the very interesting links. Il 04/05/2012 03:27, poma ha scritto: > On 05/03/2012 11:03 AM, Gianluca Gennari wrote: >> Hi poma, >> I have a 0BDA:2838 (Easycap EZTV646) and a 0BDA:2832 (no name 20x20mm >> mini DVB-T stick) and both are based on the E4000 tuner, which is not >> supported in the kernel at the moment. >> I have no idea if there are sticks with the same USB PID and the fc0012 >> tuner. > > OK, second one - no name device is "Realtek RTL2832U reference design"**. > > First one: > Once upon a time there was a "EasyCAP"� > "After while crocodile!" > �and "EzCAP" was born. > http://szforwardvideo.en.alibaba.com/aboutus.html > Obviously Easycap EZTV646 != EzCAP EzTV646 > http://www.reddit.com/r/RTLSDR/comments/s6ddo/rtlsdr_compatibility_list_v2_work_in_progress/ > ezcap EzTV646 0BDA:2838 RTL2832U/FC0012 Some revisions may have > the E4000* > http://i.imgur.com/mFD1X.jpg > (Generic) 0BDa:2838 RTL2832U/E4000* > � > And, in addition: > http://sdr.osmocom.org/trac/wiki/rtl-sdr > 0x0bda0x2832 all of them Generic RTL2832U (e.g. hama nano)** > 0x0bda0x2838 E4000 ezcap USB 2.0 DVB-T/DAB/FM dongle > � > Maybe? > https://sites.google.com/site/myrtlsdr/ That's it. Opening the device enclosure, I can read this on the PCB: "EzTV668 1.0" and it looks identical to the picture posted there. > "EzCap EZTV646 has got RTL2832U/FC0012. However rtl-sdr must be tweaked > to force FC0012 tuner because it has the same PID as EZTV668 (PID: > 0x2838) so running it whithout a tweak will select Elonics E4000 tuner. > Works, not so good at filtering." > � > Conclusion: > At least two devices share same vid/pid with different tuners - fc0012 > vs e4000. > How to resolve this from a drivers perspective in a proper way? This is not a big problem: the rtl2832 driver should read the tuner type from an internal register and load the proper module (or exit with an error message if the tuner is unsupported). > Beside, > there is GPL'ed 'e4k' tuner source code aka 'e4000 improved'*** (Elonics > E4000) > by Harald Welte > http://cgit.osmocom.org/cgit/osmo-sdr/tree/firmware/src/tuner_e4k.c > http://sdr.osmocom.org/trac/ > http://sdr.osmocom.org/trac/wiki/rtl-sdr > http://wiki.spench.net/wiki/RTL2832U*** Very nice. So we should ask Harald Welte if he is willing to have his driver merged in the kernel. > regards, > poma > Regards, Gianluca -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[RFC PATCH 1/4] si470x: Clean up, introduce the control framework.
From: Hans Verkuil This cleans up the code and si470x now uses the proper v4l2 frameworks and passes most of the v4l2-compliance tests. Signed-off-by: Hans Verkuil --- drivers/media/radio/si470x/radio-si470x-common.c | 193 +++--- drivers/media/radio/si470x/radio-si470x-i2c.c| 65 ++-- drivers/media/radio/si470x/radio-si470x-usb.c| 146 +++- drivers/media/radio/si470x/radio-si470x.h| 14 +- 4 files changed, 105 insertions(+), 313 deletions(-) diff --git a/drivers/media/radio/si470x/radio-si470x-common.c b/drivers/media/radio/si470x/radio-si470x-common.c index 0e740c9..de9475f 100644 --- a/drivers/media/radio/si470x/radio-si470x-common.c +++ b/drivers/media/radio/si470x/radio-si470x-common.c @@ -196,9 +196,9 @@ static int si470x_set_chan(struct si470x_device *radio, unsigned short chan) } if ((radio->registers[STATUSRSSI] & STATUSRSSI_STC) == 0) - dev_warn(&radio->videodev->dev, "tune does not complete\n"); + dev_warn(&radio->videodev.dev, "tune does not complete\n"); if (timed_out) - dev_warn(&radio->videodev->dev, + dev_warn(&radio->videodev.dev, "tune timed out after %u ms\n", tune_timeout); stop: @@ -344,12 +344,12 @@ static int si470x_set_seek(struct si470x_device *radio, } if ((radio->registers[STATUSRSSI] & STATUSRSSI_STC) == 0) - dev_warn(&radio->videodev->dev, "seek does not complete\n"); + dev_warn(&radio->videodev.dev, "seek does not complete\n"); if (radio->registers[STATUSRSSI] & STATUSRSSI_SF) - dev_warn(&radio->videodev->dev, + dev_warn(&radio->videodev.dev, "seek failed / band limit reached\n"); if (timed_out) - dev_warn(&radio->videodev->dev, + dev_warn(&radio->videodev.dev, "seek timed out after %u ms\n", seek_timeout); stop: @@ -463,7 +463,6 @@ static ssize_t si470x_fops_read(struct file *file, char __user *buf, unsigned int block_count = 0; /* switch on rds reception */ - mutex_lock(&radio->lock); if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0) si470x_rds_on(radio); @@ -505,7 +504,6 @@ static ssize_t si470x_fops_read(struct file *file, char __user *buf, } done: - mutex_unlock(&radio->lock); return retval; } @@ -521,10 +519,8 @@ static unsigned int si470x_fops_poll(struct file *file, /* switch on rds reception */ - mutex_lock(&radio->lock); if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0) si470x_rds_on(radio); - mutex_unlock(&radio->lock); poll_wait(file, &radio->read_queue, pts); @@ -553,134 +549,27 @@ static const struct v4l2_file_operations si470x_fops = { * Video4Linux Interface **/ -/* - * si470x_vidioc_queryctrl - enumerate control items - */ -static int si470x_vidioc_queryctrl(struct file *file, void *priv, - struct v4l2_queryctrl *qc) -{ - struct si470x_device *radio = video_drvdata(file); - int retval = -EINVAL; - - /* abort if qc->id is below V4L2_CID_BASE */ - if (qc->id < V4L2_CID_BASE) - goto done; - - /* search video control */ - switch (qc->id) { - case V4L2_CID_AUDIO_VOLUME: - return v4l2_ctrl_query_fill(qc, 0, 15, 1, 15); - case V4L2_CID_AUDIO_MUTE: - return v4l2_ctrl_query_fill(qc, 0, 1, 1, 1); - } - /* disable unsupported base controls */ - /* to satisfy kradio and such apps */ - if ((retval == -EINVAL) && (qc->id < V4L2_CID_LASTP1)) { - qc->flags = V4L2_CTRL_FLAG_DISABLED; - retval = 0; - } - -done: - if (retval < 0) - dev_warn(&radio->videodev->dev, - "query controls failed with %d\n", retval); - return retval; -} - - -/* - * si470x_vidioc_g_ctrl - get the value of a control - */ -static int si470x_vidioc_g_ctrl(struct file *file, void *priv, - struct v4l2_control *ctrl) +static int si470x_s_ctrl(struct v4l2_ctrl *ctrl) { - struct si470x_device *radio = video_drvdata(file); - int retval = 0; - - mutex_lock(&radio->lock); - /* safety checks */ - retval = si470x_disconnect_check(radio); - if (retval) - goto done; - - switch (ctrl->id) { - case V4L2_CID_AUDIO_VOLUME: - ctrl->value = radio->registers[SYSCONFIG2] & - SYSCONFIG2_VOLUME; - break; - case V4L2_CID_AUDIO_MUTE: - ctrl->value = ((radio->registers[POWERCFG] & - POWERCFG_DMUTE) == 0) ? 1 : 0; - break; - default: - retval = -EI
[RFC PATCH 4/4] radio-si470x-usb: remove autosuspend, implement suspend/resume.
From: Hans Verkuil The radio-si470x-usb driver supported both autosuspend and it stopped the radio the moment the last user of the radio device closed it. However, that was very confusing since if you play the audio from the device (e.g. through arecord -D ... | aplay) then no sound would play unless you had the radio device open at the same time, even though there is no need to do anything with that node. On the other hand, the actual suspend/resume functions didn't do anything, which would fail if you *did* have the radio node open at that time. So: - remove autosuspend (bad idea in general for USB radio devices) - move the start/stop out of the open/release functions into the resume/suspend functions. Signed-off-by: Hans Verkuil --- drivers/media/radio/si470x/radio-si470x-common.c |1 - drivers/media/radio/si470x/radio-si470x-usb.c| 149 ++ 2 files changed, 70 insertions(+), 80 deletions(-) diff --git a/drivers/media/radio/si470x/radio-si470x-common.c b/drivers/media/radio/si470x/radio-si470x-common.c index b9a44d4..969cf49 100644 --- a/drivers/media/radio/si470x/radio-si470x-common.c +++ b/drivers/media/radio/si470x/radio-si470x-common.c @@ -570,7 +570,6 @@ static int si470x_s_ctrl(struct v4l2_ctrl *ctrl) else radio->registers[POWERCFG] |= POWERCFG_DMUTE; return si470x_set_register(radio, POWERCFG); - break; default: return -EINVAL; } diff --git a/drivers/media/radio/si470x/radio-si470x-usb.c b/drivers/media/radio/si470x/radio-si470x-usb.c index f133c3d..e9f6387 100644 --- a/drivers/media/radio/si470x/radio-si470x-usb.c +++ b/drivers/media/radio/si470x/radio-si470x-usb.c @@ -481,91 +481,20 @@ resubmit: } - -/** - * File Operations Interface - **/ - -/* - * si470x_fops_open - file open - */ int si470x_fops_open(struct file *file) { - struct si470x_device *radio = video_drvdata(file); - int retval = v4l2_fh_open(file); - - if (retval) - return retval; - - retval = usb_autopm_get_interface(radio->intf); - if (retval < 0) - goto done; - - if (v4l2_fh_is_singular_file(file)) { - /* start radio */ - retval = si470x_start(radio); - if (retval < 0) { - usb_autopm_put_interface(radio->intf); - goto done; - } - - /* initialize interrupt urb */ - usb_fill_int_urb(radio->int_in_urb, radio->usbdev, - usb_rcvintpipe(radio->usbdev, - radio->int_in_endpoint->bEndpointAddress), - radio->int_in_buffer, - le16_to_cpu(radio->int_in_endpoint->wMaxPacketSize), - si470x_int_in_callback, - radio, - radio->int_in_endpoint->bInterval); - - radio->int_in_running = 1; - mb(); - - retval = usb_submit_urb(radio->int_in_urb, GFP_KERNEL); - if (retval) { - dev_info(&radio->intf->dev, -"submitting int urb failed (%d)\n", retval); - radio->int_in_running = 0; - usb_autopm_put_interface(radio->intf); - } - } - -done: - if (retval) - v4l2_fh_release(file); - return retval; + return v4l2_fh_open(file); } - -/* - * si470x_fops_release - file release - */ int si470x_fops_release(struct file *file) { - struct si470x_device *radio = video_drvdata(file); - - if (v4l2_fh_is_singular_file(file)) { - /* shutdown interrupt handler */ - if (radio->int_in_running) { - radio->int_in_running = 0; - if (radio->int_in_urb) - usb_kill_urb(radio->int_in_urb); - } - - /* cancel read processes */ - wake_up_interruptible(&radio->read_queue); - - /* stop radio */ - si470x_stop(radio); - usb_autopm_put_interface(radio->intf); - } return v4l2_fh_release(file); } -static void si470x_usb_release(struct video_device *vdev) +static void si470x_usb_release(struct v4l2_device *v4l2_dev) { - struct si470x_device *radio = video_get_drvdata(vdev); + struct si470x_device *radio = + container_of(v4l2_dev, struct si470x_device, v4l2_dev); usb_free_urb(radio->int_in_urb); v4l2_ctrl_handler_free(&radio->hdl); @@ -599,6 +528,38 @@ int si470x_vidioc_querycap(struct file *file, void *priv, } +static int si470x_start_usb(struct si470x_device *radio) +{ + int retval; + + /
[RFC PATCH 0/4] si470x: clean up and use latest frameworks
This patch series updates the si470x driver so that it uses the latest frameworks and passes the v4l2-compliance test tool. It also removes usb autosuspend and the stop/start of the radio in the release/open fops. It was very, very confusing that 'arecord -D ... | aplay' didn't work unless you keep the radio0 node open (for no good reason other then ensuring that the radio is started). So the radio_start/stop code has been moved from open/release to resume/suspend where it is used when you suspend the device. Note that this change is for the USB version only, I did not touch the suspend/resume code in the i2c version. I've tested it all with my ADS InstantFM device. -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[RFC PATCH 2/4] si470x: add control event support and more v4l2 compliancy fixes.
From: Hans Verkuil Signed-off-by: Hans Verkuil --- drivers/media/radio/si470x/radio-si470x-common.c | 45 ++ 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/drivers/media/radio/si470x/radio-si470x-common.c b/drivers/media/radio/si470x/radio-si470x-common.c index de9475f..e70badf 100644 --- a/drivers/media/radio/si470x/radio-si470x-common.c +++ b/drivers/media/radio/si470x/radio-si470x-common.c @@ -262,7 +262,7 @@ static int si470x_get_freq(struct si470x_device *radio, unsigned int *freq) */ int si470x_set_freq(struct si470x_device *radio, unsigned int freq) { - unsigned int spacing, band_bottom; + unsigned int spacing, band_bottom, band_top; unsigned short chan; /* Spacing (kHz) */ @@ -278,19 +278,26 @@ int si470x_set_freq(struct si470x_device *radio, unsigned int freq) spacing = 0.050 * FREQ_MUL; break; }; - /* Bottom of Band (MHz) */ + /* Bottom/Top of Band (MHz) */ switch ((radio->registers[SYSCONFIG2] & SYSCONFIG2_BAND) >> 6) { /* 0: 87.5 - 108 MHz (USA, Europe) */ case 0: - band_bottom = 87.5 * FREQ_MUL; break; + band_bottom = 87.5 * FREQ_MUL; + band_top = 108 * FREQ_MUL; + break; /* 1: 76 - 108 MHz (Japan wide band) */ default: - band_bottom = 76 * FREQ_MUL; break; + band_bottom = 76 * FREQ_MUL; + band_top = 108 * FREQ_MUL; + break; /* 2: 76 - 90 MHz (Japan) */ case 2: - band_bottom = 76 * FREQ_MUL; break; + band_bottom = 76 * FREQ_MUL; + band_top = 90 * FREQ_MUL; + break; }; + freq = clamp(freq, band_bottom, band_top); /* Chan = [ Freq (Mhz) - Bottom of Band (MHz) ] / Spacing (kHz) */ chan = (freq - band_bottom) / spacing; @@ -515,17 +522,19 @@ static unsigned int si470x_fops_poll(struct file *file, struct poll_table_struct *pts) { struct si470x_device *radio = video_drvdata(file); - int retval = 0; - - /* switch on rds reception */ + unsigned long req_events = poll_requested_events(pts); + int retval = v4l2_ctrl_poll(file, pts); - if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0) - si470x_rds_on(radio); + if (req_events & (POLLIN | POLLRDNORM)) { + /* switch on rds reception */ + if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0) + si470x_rds_on(radio); - poll_wait(file, &radio->read_queue, pts); + poll_wait(file, &radio->read_queue, pts); - if (radio->rd_index != radio->wr_index) - retval = POLLIN | POLLRDNORM; + if (radio->rd_index != radio->wr_index) + retval |= POLLIN | POLLRDNORM; + } return retval; } @@ -637,6 +646,8 @@ static int si470x_vidioc_g_tuner(struct file *file, void *priv, tuner->signal = (radio->registers[STATUSRSSI] & STATUSRSSI_RSSI); /* the ideal factor is 0x/75 = 873,8 */ tuner->signal = (tuner->signal * 873) + (8 * tuner->signal / 10); + if (tuner->signal > 0x) + tuner->signal = 0x; /* automatic frequency control: -1: freq to low, 1 freq to high */ /* AFCRL does only indicate that freq. differs, not if too low/high */ @@ -660,7 +671,7 @@ static int si470x_vidioc_s_tuner(struct file *file, void *priv, int retval = 0; if (tuner->index != 0) - goto done; + return -EINVAL; /* mono/stereo selector */ switch (tuner->audmode) { @@ -668,15 +679,13 @@ static int si470x_vidioc_s_tuner(struct file *file, void *priv, radio->registers[POWERCFG] |= POWERCFG_MONO; /* force mono */ break; case V4L2_TUNER_MODE_STEREO: + default: radio->registers[POWERCFG] &= ~POWERCFG_MONO; /* try stereo */ break; - default: - goto done; } retval = si470x_set_register(radio, POWERCFG); -done: if (retval < 0) dev_warn(&radio->videodev.dev, "set tuner failed with %d\n", retval); @@ -770,6 +779,8 @@ static const struct v4l2_ioctl_ops si470x_ioctl_ops = { .vidioc_g_frequency = si470x_vidioc_g_frequency, .vidioc_s_frequency = si470x_vidioc_s_frequency, .vidioc_s_hw_freq_seek = si470x_vidioc_s_hw_freq_seek, + .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, + .vidioc_unsubscribe_event = v4l2_event_unsubscribe, }; -- 1.7.10 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[RFC PATCH 3/4] radio-si470x-common.c: remove unnecessary kernel log spam.
From: Hans Verkuil There is no need to report an error in the log, you are already returning that error to userspace after all. Signed-off-by: Hans Verkuil --- drivers/media/radio/si470x/radio-si470x-common.c | 78 +- 1 file changed, 17 insertions(+), 61 deletions(-) diff --git a/drivers/media/radio/si470x/radio-si470x-common.c b/drivers/media/radio/si470x/radio-si470x-common.c index e70badf..b9a44d4 100644 --- a/drivers/media/radio/si470x/radio-si470x-common.c +++ b/drivers/media/radio/si470x/radio-si470x-common.c @@ -327,7 +327,7 @@ static int si470x_set_seek(struct si470x_device *radio, radio->registers[POWERCFG] &= ~POWERCFG_SEEKUP; retval = si470x_set_register(radio, POWERCFG); if (retval < 0) - goto done; + return retval; /* currently I2C driver only uses interrupt way to seek */ if (radio->stci_enabled) { @@ -355,20 +355,15 @@ static int si470x_set_seek(struct si470x_device *radio, if (radio->registers[STATUSRSSI] & STATUSRSSI_SF) dev_warn(&radio->videodev.dev, "seek failed / band limit reached\n"); - if (timed_out) - dev_warn(&radio->videodev.dev, - "seek timed out after %u ms\n", seek_timeout); stop: /* stop seeking */ radio->registers[POWERCFG] &= ~POWERCFG_SEEK; retval = si470x_set_register(radio, POWERCFG); -done: /* try again, if timed out */ - if ((retval == 0) && timed_out) - retval = -EAGAIN; - + if (retval == 0 && timed_out) + return -EAGAIN; return retval; } @@ -589,16 +584,14 @@ static int si470x_vidioc_g_tuner(struct file *file, void *priv, struct v4l2_tuner *tuner) { struct si470x_device *radio = video_drvdata(file); - int retval = 0; + int retval; - if (tuner->index != 0) { - retval = -EINVAL; - goto done; - } + if (tuner->index != 0) + return -EINVAL; retval = si470x_get_register(radio, STATUSRSSI); if (retval < 0) - goto done; + return retval; /* driver constants */ strcpy(tuner->name, "FM"); @@ -653,10 +646,6 @@ static int si470x_vidioc_g_tuner(struct file *file, void *priv, /* AFCRL does only indicate that freq. differs, not if too low/high */ tuner->afc = (radio->registers[STATUSRSSI] & STATUSRSSI_AFCRL) ? 1 : 0; -done: - if (retval < 0) - dev_warn(&radio->videodev.dev, - "get tuner failed with %d\n", retval); return retval; } @@ -668,7 +657,6 @@ static int si470x_vidioc_s_tuner(struct file *file, void *priv, struct v4l2_tuner *tuner) { struct si470x_device *radio = video_drvdata(file); - int retval = 0; if (tuner->index != 0) return -EINVAL; @@ -684,12 +672,7 @@ static int si470x_vidioc_s_tuner(struct file *file, void *priv, break; } - retval = si470x_set_register(radio, POWERCFG); - - if (retval < 0) - dev_warn(&radio->videodev.dev, - "set tuner failed with %d\n", retval); - return retval; + return si470x_set_register(radio, POWERCFG); } @@ -700,21 +683,12 @@ static int si470x_vidioc_g_frequency(struct file *file, void *priv, struct v4l2_frequency *freq) { struct si470x_device *radio = video_drvdata(file); - int retval = 0; - if (freq->tuner != 0) { - retval = -EINVAL; - goto done; - } + if (freq->tuner != 0) + return -EINVAL; freq->type = V4L2_TUNER_RADIO; - retval = si470x_get_freq(radio, &freq->frequency); - -done: - if (retval < 0) - dev_warn(&radio->videodev.dev, - "get frequency failed with %d\n", retval); - return retval; + return si470x_get_freq(radio, &freq->frequency); } @@ -725,20 +699,11 @@ static int si470x_vidioc_s_frequency(struct file *file, void *priv, struct v4l2_frequency *freq) { struct si470x_device *radio = video_drvdata(file); - int retval = 0; - - if (freq->tuner != 0) { - retval = -EINVAL; - goto done; - } - retval = si470x_set_freq(radio, freq->frequency); + if (freq->tuner != 0) + return -EINVAL; -done: - if (retval < 0) - dev_warn(&radio->videodev.dev, - "set frequency failed with %d\n", retval); - return retval; + return si470x_set_freq(radio, freq->frequency); } @@ -749,20 +714,11 @@ static int si470x_vidioc_s_hw_freq_seek(struct file *file, void *priv, struct v4l2_hw_freq_seek *seek) { struct si470x_device *radio = video_drvdata(file); -
[GIT PULL FOR 3.5] gspca_pac73XX improvements + misc fixes
Hi Mauro et al, Please pull from my tree for: -a small stk driver fix -a bunch of gspca_pac73XX improvements -removal of the long deprecated et61x251 driver Note this pull request obsoletes my previous pull req. The following changes since commit a1ac5dc28d2b4ca78e183229f7c595ffd725241c: [media] gspca - sn9c20x: Change the exposure setting of Omnivision sensors (2012-05-03 15:29:56 -0300) are available in the git repository at: git://linuxtv.org/hgoede/gspca.git media-for_v3.5 for you to fetch changes up to cfe42cea7b4040c6e18f113a0494426764bfa21b: media/video/et61x251: Remove this deprecated driver (2012-05-04 11:38:43 +0200) Hans de Goede (13): stk-webcam: Don't flip the image by default gspca/autogain_functions.h: Allow users to declare what they want gspca_pac73xx: Remove comments from before the 7302 / 7311 separation gspca_pac7311: Make sure exposure changes get applied immediately gspca_pac7311: Adjust control scales to match registers gspca_pac7311: Switch to new gspca control mechanism gspca_pac7311: Switch to coarse expo autogain algorithm gspca_pac7311: Convert multi-line comments to standard kernel style gspca_pac7311: Properly set the compression balance gspca_pac7302: Convert multi-line comments to standard kernel style gspca_pac7302: Document some more registers gspca_pac7302: Improve the gain control media/video/et61x251: Remove this deprecated driver drivers/media/video/Kconfig|2 - drivers/media/video/Makefile |1 - drivers/media/video/et61x251/Kconfig | 18 - drivers/media/video/et61x251/Makefile |4 - drivers/media/video/et61x251/et61x251.h| 213 -- drivers/media/video/et61x251/et61x251_core.c | 2683 drivers/media/video/et61x251/et61x251_sensor.h | 108 - drivers/media/video/et61x251/et61x251_tas5130d1b.c | 143 -- drivers/media/video/gspca/autogain_functions.h |6 +- drivers/media/video/gspca/nw80x.c |2 + drivers/media/video/gspca/pac7302.c| 184 +- drivers/media/video/gspca/pac7311.c| 380 +-- drivers/media/video/gspca/sonixb.c |2 + drivers/media/video/gspca/sonixj.c |5 +- drivers/media/video/gspca/topro.c |6 +- drivers/media/video/stk-webcam.c |8 +- 16 files changed, 239 insertions(+), 3526 deletions(-) delete mode 100644 drivers/media/video/et61x251/Kconfig delete mode 100644 drivers/media/video/et61x251/Makefile delete mode 100644 drivers/media/video/et61x251/et61x251.h delete mode 100644 drivers/media/video/et61x251/et61x251_core.c delete mode 100644 drivers/media/video/et61x251/et61x251_sensor.h delete mode 100644 drivers/media/video/et61x251/et61x251_tas5130d1b.c Thanks & Regards, Hans -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] [media] cx88: Remove duplicate const
Emil Goode wrote: > This patch fixes the following sparse warnings > by removing use of duplicate const. Is this really just about quieting sparse noise? I would find it clearer to read a more straightforward explanation like Remove some redundant uses of "const" detected by sparse: but that is only a nitpick. [...] > --- a/drivers/media/video/cx88/cx88-alsa.c > +++ b/drivers/media/video/cx88/cx88-alsa.c > @@ -766,7 +766,7 @@ static struct snd_kcontrol_new snd_cx88_alc_switch = { > * Only boards with eeprom and byte 1 at eeprom=1 have it > */ > > -static const struct pci_device_id const cx88_audio_pci_tbl[] __devinitdata = > { > +static const struct pci_device_id cx88_audio_pci_tbl[] __devinitdata = { These double "const" were introduced in v2.6.37-rc1~64^2~464 (V4L/DVB: drivers/media: Make static data tables and strings const, 2010-08-25). The address of an array is already immutable by definition, so for what it's worth, with or without a clarified commit message, Acked-by: Jonathan Nieder -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] [media] cx88: Remove duplicate const
This patch fixes the following sparse warnings by removing use of duplicate const. drivers/media/video/cx88/cx88.h:152:40: warning: duplicate const drivers/media/video/cx88/cx88-core.c:256:33: warning: duplicate const drivers/media/video/cx88/cx88-alsa.c:769:41: warning: duplicate const Signed-off-by: Emil Goode --- drivers/media/video/cx88/cx88-alsa.c |2 +- drivers/media/video/cx88/cx88-core.c |2 +- drivers/media/video/cx88/cx88.h |2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/media/video/cx88/cx88-alsa.c b/drivers/media/video/cx88/cx88-alsa.c index 04bf662..408e3c9 100644 --- a/drivers/media/video/cx88/cx88-alsa.c +++ b/drivers/media/video/cx88/cx88-alsa.c @@ -766,7 +766,7 @@ static struct snd_kcontrol_new snd_cx88_alc_switch = { * Only boards with eeprom and byte 1 at eeprom=1 have it */ -static const struct pci_device_id const cx88_audio_pci_tbl[] __devinitdata = { +static const struct pci_device_id cx88_audio_pci_tbl[] __devinitdata = { {0x14f1,0x8801,PCI_ANY_ID,PCI_ANY_ID,0,0,0}, {0x14f1,0x8811,PCI_ANY_ID,PCI_ANY_ID,0,0,0}, {0, } diff --git a/drivers/media/video/cx88/cx88-core.c b/drivers/media/video/cx88/cx88-core.c index fbfdd80..dbd2fa2 100644 --- a/drivers/media/video/cx88/cx88-core.c +++ b/drivers/media/video/cx88/cx88-core.c @@ -253,7 +253,7 @@ cx88_free_buffer(struct videobuf_queue *q, struct cx88_buffer *buf) *0x0c00 - FIFOs */ -const struct sram_channel const cx88_sram_channels[] = { +const struct sram_channel cx88_sram_channels[] = { [SRAM_CH21] = { .name = "video y / packed", .cmds_start = 0x180040, diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h index c9659de..aabec7e 100644 --- a/drivers/media/video/cx88/cx88.h +++ b/drivers/media/video/cx88/cx88.h @@ -149,7 +149,7 @@ struct sram_channel { u32 cnt1_reg; u32 cnt2_reg; }; -extern const struct sram_channel const cx88_sram_channels[]; +extern const struct sram_channel cx88_sram_channels[]; /* --- */ /* card configuration */ -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: logitech quickcam 9000 uvcdynctrl broken since kernel 3.2 - PING
Hans, I've add you has a developer to the project, so you should be able to commit these patches yourself, I would suggest that you pushed a new branch with your changes and after testing we merge them into the master. I'm doing the same for some fixes I have planned and also for the code for version 0.3 that Martin kindly send me (it has a lot of new apps, including a qt interface, and video capture support). This is the project page: https://sourceforge.net/p/libwebcam/code currently master is not building against the new uvcvideo.h, I'll try to fix that today, also the check for this header during configuration is unnecessary since it's now in linux headers (just need to include it with linux/uvcvideo.h) Regards, Paulo 2012/5/4 Hans de Goede : > Hi Paulo, > > I've also done some work on libwebcam a while ago, but have not yet had > the time to send this to Martin Rubli. Attached are git format-patch > patches against the 0.2.1 branch of svn. Note these are against what > was in that branch when I did this work some months ago, so not sure > if it will still apply cleanly. > > I would really like to work together with you on getting an updated version > of libwebcam out there for use in distros (I maintain libwebcam in Fedora, > and AFAIK you maintain it in Debian, right?) > > My sourceforge.net account is jwrdegoede, I hope you're willing to give > me commit access to the git repo there. > > I guess if there is going to be more then 1 of us working on the git repo > we should have some review procedure. If others don't object we could post > patches to linux-media, prefixing the subject with a [PATCH libwebcam] and > then do reviews on linux-media and push only after an ack? > > I guess we could start with that right away with my proposed patches, > if you can make an initial git repo available I can rebase on top > of that and then send the patches with git send-email (so 1 patch / mail) > for review? > > Either way thanks for working on this! > > Regards, > > Hans > > > > > > > > On 05/03/2012 04:17 PM, Paulo Assis wrote: >> >> Karl Hi, >> I'm setting up a libwebcam git repo in sourceforge, Martin Rubli from >> logitech (the libwebcam developer), was kind enough to post me all >> it's code and the old svn repo backup. >> He had already done some fixes regarding the new ioctls for version >> 0.3, so I just need to go through that and add add them to 0.2. >> I still need to check with him how he wants to handle the 0.3 version, >> since it has a lot of new code ( and some extra apps ). >> >> Regards, >> Paulo >> >> 2012/5/3 Karl Kiniger: >>> >>> Hi Paulo, >>> >>> On Wed 120502, Paulo Assis wrote: OK, so UVCIOC_CTRL_ADD is no longer available, now we have: UVCIOC_CTRL_MAP and UVCIOC_CTRL_QUERY, so I guess some changes are needed, I'll try to fix this ASAP. >>> >>> >>> compiled libwebcam-0.2.1 from Ubuntu (had to fight against >>> CMake - I am almost CMake agnostic so far...) and I got the >>> manual focus control in guvcview so things are definitely >>> looking better now. >>> >>> So far I have got a focus slider and a LED1 frequency slider, >>> but not a LED mode... forgot what exactly was available in >>> the past. >>> >>> --- >>> LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/uvcdynctrl -i >>> /usr/share/uvcdynctrl/data/046d/logitech.xml >>> [libwebcam] Unsupported V4L2_CID_EXPOSURE_AUTO control with a >>> non-contiguous range of choice IDs found >>> [libwebcam] Invalid or unsupported V4L2 control encountered: ctrl_id = >>> 0x009A0901, name = 'Exposure, Auto' >>> Importing dynamic controls from file >>> /usr/share/uvcdynctrl/data/046d/logitech.xml. >>> /usr/share/uvcdynctrl/data/046d/logitech.xml: error: video0: unable to >>> map 'Pan (relative)' control. ioctl(UVCIOC_CTRL_MAP) failed with >>> return value -1 (error 2: No such file or directory) >>> /usr/share/uvcdynctrl/data/046d/logitech.xml: error: video0: unable to >>> map 'Tilt (relative)' >>> control. ioctl(UVCIOC_CTRL_MAP) failed with return value -1 (error 2: >>> No such file or directory) >>> /usr/share/uvcdynctrl/data/046d/logitech.xml:354: error: Invalid V4L2 >>> control type specified: 'V4L2_CTRL_TYPE_BUTTON' >>> /usr/share/uvcdynctrl/data/046d/logitech.xml:368: error: Invalid V4L2 >>> control type specified: 'V4L2_CTRL_TYPE_BUTTON' >>> /usr/share/uvcdynctrl/data/046d/logitech.xml:396: error: Invalid V4L2 >>> control type specified: 'V4L2_CTRL_TYPE_MENU' >>> >>> Thanks again, >>> Karl >>> Regards, Paulo >>> >>> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-media" in >> the body of a message to majord...@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[media-ctl PATCH 1/3] Support selections API for crop
Support the new selections API for crop. Fall back to use the old crop API in case the selection API isn't available. Signed-off-by: Sakari Ailus --- src/main.c |4 ++- src/v4l2subdev.c | 100 +- src/v4l2subdev.h | 37 +++- 3 files changed, 93 insertions(+), 48 deletions(-) diff --git a/src/main.c b/src/main.c index 4f3271c..53964e4 100644 --- a/src/main.c +++ b/src/main.c @@ -62,7 +62,9 @@ static void v4l2_subdev_print_format(struct media_entity *entity, printf("[%s %ux%u", v4l2_subdev_pixelcode_to_string(format.code), format.width, format.height); - ret = v4l2_subdev_get_crop(entity, &rect, pad, which); + ret = v4l2_subdev_get_selection(entity, &rect, pad, + V4L2_SUBDEV_SEL_TGT_CROP_ACTUAL, + which); if (ret == 0) printf(" (%u,%u)/%ux%u", rect.left, rect.top, rect.width, rect.height); diff --git a/src/v4l2subdev.c b/src/v4l2subdev.c index b886b72..92360bb 100644 --- a/src/v4l2subdev.c +++ b/src/v4l2subdev.c @@ -104,48 +104,85 @@ int v4l2_subdev_set_format(struct media_entity *entity, return 0; } -int v4l2_subdev_get_crop(struct media_entity *entity, struct v4l2_rect *rect, -unsigned int pad, enum v4l2_subdev_format_whence which) +int v4l2_subdev_get_selection( + struct media_entity *entity, struct v4l2_rect *r, + unsigned int pad, int target, enum v4l2_subdev_format_whence which) { - struct v4l2_subdev_crop crop; + union { + struct v4l2_subdev_selection sel; + struct v4l2_subdev_crop crop; + } u; int ret; ret = v4l2_subdev_open(entity); if (ret < 0) return ret; - memset(&crop, 0, sizeof(crop)); - crop.pad = pad; - crop.which = which; + memset(&u.sel, 0, sizeof(u.sel)); + u.sel.pad = pad; + u.sel.target = target; + u.sel.which = which; - ret = ioctl(entity->fd, VIDIOC_SUBDEV_G_CROP, &crop); + ret = ioctl(entity->fd, VIDIOC_SUBDEV_G_SELECTION, &u.sel); + if (ret >= 0) { + *r = u.sel.r; + return 0; + } + if (errno != ENOTTY + || target != V4L2_SUBDEV_SEL_TGT_CROP_ACTUAL) + return -errno; + + memset(&u.crop, 0, sizeof(u.crop)); + u.crop.pad = pad; + u.crop.which = which; + + ret = ioctl(entity->fd, VIDIOC_SUBDEV_G_CROP, &u.crop); if (ret < 0) return -errno; - *rect = crop.rect; + *r = u.crop.rect; return 0; } -int v4l2_subdev_set_crop(struct media_entity *entity, struct v4l2_rect *rect, -unsigned int pad, enum v4l2_subdev_format_whence which) +int v4l2_subdev_set_selection( + struct media_entity *entity, struct v4l2_rect *r, + unsigned int pad, int target, enum v4l2_subdev_format_whence which) { - struct v4l2_subdev_crop crop; + union { + struct v4l2_subdev_selection sel; + struct v4l2_subdev_crop crop; + } u; int ret; ret = v4l2_subdev_open(entity); if (ret < 0) return ret; - memset(&crop, 0, sizeof(crop)); - crop.pad = pad; - crop.which = which; - crop.rect = *rect; + memset(&u.sel, 0, sizeof(u.sel)); + u.sel.pad = pad; + u.sel.target = target; + u.sel.which = which; + u.sel.r = *r; + + ret = ioctl(entity->fd, VIDIOC_SUBDEV_S_SELECTION, &u.sel); + if (ret >= 0) { + *r = u.sel.r; + return 0; + } + if (errno != ENOTTY + || target != V4L2_SUBDEV_SEL_TGT_CROP_ACTUAL) + return -errno; + + memset(&u.crop, 0, sizeof(u.crop)); + u.crop.pad = pad; + u.crop.which = which; + u.crop.rect = *r; - ret = ioctl(entity->fd, VIDIOC_SUBDEV_S_CROP, &crop); + ret = ioctl(entity->fd, VIDIOC_SUBDEV_S_CROP, &u.crop); if (ret < 0) return -errno; - *rect = crop.rect; + *r = u.crop.rect; return 0; } @@ -355,30 +392,31 @@ static int set_format(struct media_pad *pad, return 0; } -static int set_crop(struct media_pad *pad, struct v4l2_rect *crop) +static int set_selection(struct media_pad *pad, int tgt, +struct v4l2_rect *rect) { int ret; - if (crop->left == -1 || crop->top == -1) + if (rect->left == -1 || rect->top == -1) return 0; media_dbg(pad->entity->media, - "Setting up crop rectangle (%u,%u)/%ux%u on pad %s/%u\n", - crop->left, crop->top, crop->width, crop->height, + "Setting up selection target %d rectangle (%u,%u)/%ux%u on pad %s/%u\n", + tgt, rect->left, rect->top, rect-
[media-ctl PATCH 2/3] New, more flexible syntax for media-ctl
More flexible and extensible syntax for media-ctl which allows better usage of the selection API. Signed-off-by: Sakari Ailus --- src/main.c | 17 +--- src/options.c|9 -- src/v4l2subdev.c | 73 +++-- 3 files changed, 62 insertions(+), 37 deletions(-) diff --git a/src/main.c b/src/main.c index 53964e4..6de1031 100644 --- a/src/main.c +++ b/src/main.c @@ -59,15 +59,24 @@ static void v4l2_subdev_print_format(struct media_entity *entity, if (ret != 0) return; - printf("[%s %ux%u", v4l2_subdev_pixelcode_to_string(format.code), - format.width, format.height); + printf("\t\t[fmt:%s/%ux%u", + v4l2_subdev_pixelcode_to_string(format.code), + format.width, format.height); + + ret = v4l2_subdev_get_selection(entity, &rect, pad, + V4L2_SUBDEV_SEL_TGT_CROP_BOUNDS, + which); + if (ret == 0) + printf("\n\t\t crop.bounds:%u,%u/%ux%u", rect.left, rect.top, + rect.width, rect.height); ret = v4l2_subdev_get_selection(entity, &rect, pad, V4L2_SUBDEV_SEL_TGT_CROP_ACTUAL, which); if (ret == 0) - printf(" (%u,%u)/%ux%u", rect.left, rect.top, + printf("\n\t\t crop.actual:%u,%u/%ux%u", rect.left, rect.top, rect.width, rect.height); + printf("]"); } @@ -252,7 +261,7 @@ static void media_print_topology_text(struct media_device *media) for (j = 0; j < entity->info.pads; j++) { struct media_pad *pad = &entity->pads[j]; - printf("\tpad%u: %s ", j, media_pad_type_to_string(pad->flags)); + printf("\tpad%u: %s\n", j, media_pad_type_to_string(pad->flags)); if (media_entity_type(entity) == MEDIA_ENT_T_V4L2_SUBDEV) v4l2_subdev_print_format(entity, j, V4L2_SUBDEV_FORMAT_ACTIVE); diff --git a/src/options.c b/src/options.c index 60cf6d5..4d9d48f 100644 --- a/src/options.c +++ b/src/options.c @@ -53,12 +53,15 @@ static void usage(const char *argv0, int verbose) printf("\n"); printf("Links and formats are defined as\n"); printf("\tlink= pad, '->', pad, '[', flags, ']' ;\n"); - printf("\tformat = pad, '[', fcc, ' ', size, [ ' ', crop ], [ ' ', '@', frame interval ], ']' ;\n"); + printf("\tformat = pad, '[', formats ']' ;\n"); + printf("\tformats = formats ',' formats ;\n"); + printf("\tformats = fmt | crop | frame interval ;\n"); + printf("\fmt = 'fmt:', fcc, '/', size ;\n"); printf("\tpad = entity, ':', pad number ;\n"); printf("\tentity = entity number | ( '\"', entity name, '\"' ) ;\n"); printf("\tsize= width, 'x', height ;\n"); - printf("\tcrop= '(', left, ',', top, ')', '/', size ;\n"); - printf("\tframe interval = numerator, '/', denominator ;\n"); + printf("\tcrop= 'crop.actual:', left, ',', top, '/', size ;\n"); + printf("\tframe interval = '@', numerator, '/', denominator ;\n"); printf("where the fields are\n"); printf("\tentity number Entity numeric identifier\n"); printf("\tentity name Entity name (string) \n"); diff --git a/src/v4l2subdev.c b/src/v4l2subdev.c index 92360bb..87b22fc 100644 --- a/src/v4l2subdev.c +++ b/src/v4l2subdev.c @@ -235,13 +235,13 @@ static int v4l2_subdev_parse_format(struct v4l2_mbus_framefmt *format, char *end; for (; isspace(*p); ++p); - for (end = (char *)p; !isspace(*end) && *end != '\0'; ++end); + for (end = (char *)p; *end != '/' && *end != '\0'; ++end); code = v4l2_subdev_string_to_pixelcode(p, end - p); if (code == (enum v4l2_mbus_pixelcode)-1) return -EINVAL; - for (p = end; isspace(*p); ++p); + p = end + 1; width = strtoul(p, &end, 10); if (*end != 'x') return -EINVAL; @@ -258,32 +258,27 @@ static int v4l2_subdev_parse_format(struct v4l2_mbus_framefmt *format, return 0; } -static int v4l2_subdev_parse_crop( - struct v4l2_rect *crop, const char *p, char **endp) +static int v4l2_subdev_parse_rectangle( + struct v4l2_rect *r, const char *p, char **endp) { char *end; - if (*p++ != '(') - return -EINVAL; - - crop->left = strtoul(p, &end, 10); + r->left = strtoul(p, &end, 10); if (*end != ',') return -EINVAL; p = end + 1; - crop->top = strtoul(p, &end, 10); - if (*end++ != ')') - return -EINVAL; + r->top = strtoul(p, &end, 10); if (
[media-ctl PATCH 3/3] Compose rectangle support for media-ctl
Signed-off-by: Sakari Ailus --- src/main.c | 14 ++ src/options.c|6 -- src/v4l2subdev.c | 22 ++ 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/main.c b/src/main.c index 6de1031..6362f3e 100644 --- a/src/main.c +++ b/src/main.c @@ -77,6 +77,20 @@ static void v4l2_subdev_print_format(struct media_entity *entity, printf("\n\t\t crop.actual:%u,%u/%ux%u", rect.left, rect.top, rect.width, rect.height); + ret = v4l2_subdev_get_selection(entity, &rect, pad, + V4L2_SUBDEV_SEL_TGT_COMPOSE_BOUNDS, + which); + if (ret == 0) + printf("\n\t\t compose.bounds:%u,%u/%ux%u", + rect.left, rect.top, rect.width, rect.height); + + ret = v4l2_subdev_get_selection(entity, &rect, pad, + V4L2_SUBDEV_SEL_TGT_COMPOSE_ACTUAL, + which); + if (ret == 0) + printf("\n\t\t compose.actual:%u,%u/%ux%u", + rect.left, rect.top, rect.width, rect.height); + printf("]"); } diff --git a/src/options.c b/src/options.c index 4d9d48f..c0b3d3b 100644 --- a/src/options.c +++ b/src/options.c @@ -55,13 +55,15 @@ static void usage(const char *argv0, int verbose) printf("\tlink= pad, '->', pad, '[', flags, ']' ;\n"); printf("\tformat = pad, '[', formats ']' ;\n"); printf("\tformats = formats ',' formats ;\n"); - printf("\tformats = fmt | crop | frame interval ;\n"); + printf("\tformats = fmt | crop | compose | frame interval ;\n"); printf("\fmt = 'fmt:', fcc, '/', size ;\n"); printf("\tpad = entity, ':', pad number ;\n"); printf("\tentity = entity number | ( '\"', entity name, '\"' ) ;\n"); printf("\tsize= width, 'x', height ;\n"); - printf("\tcrop= 'crop.actual:', left, ',', top, '/', size ;\n"); + printf("\tcrop= 'crop.actual:', window ;\n"); + printf("\tcompose = 'compose.actual:', window ;\n"); printf("\tframe interval = '@', numerator, '/', denominator ;\n"); + printf("\twindow = left, ',', top, '/', size ;\n"); printf("where the fields are\n"); printf("\tentity number Entity numeric identifier\n"); printf("\tentity name Entity name (string) \n"); diff --git a/src/v4l2subdev.c b/src/v4l2subdev.c index 87b22fc..8e3a447 100644 --- a/src/v4l2subdev.c +++ b/src/v4l2subdev.c @@ -317,8 +317,8 @@ static int strhazit(const char *str, const char **p) static struct media_pad *v4l2_subdev_parse_pad_format( struct media_device *media, struct v4l2_mbus_framefmt *format, - struct v4l2_rect *crop, struct v4l2_fract *interval, const char *p, - char **endp) + struct v4l2_rect *crop, struct v4l2_rect *compose, + struct v4l2_fract *interval, const char *p, char **endp) { struct media_pad *pad; char *end; @@ -355,6 +355,15 @@ static struct media_pad *v4l2_subdev_parse_pad_format( continue; } + if (!strhazit("compose.actual:", &p)) { + ret = v4l2_subdev_parse_rectangle(compose, p, &end); + if (ret < 0) + return NULL; + + for (p = end; isspace(*p); p++); + continue; + } + if (*p == '@') { ret = v4l2_subdev_parse_frame_interval(interval, ++p, &end); if (ret < 0) @@ -468,13 +477,14 @@ static int v4l2_subdev_parse_setup_format(struct media_device *media, struct v4l2_mbus_framefmt format = { 0, 0, 0 }; struct media_pad *pad; struct v4l2_rect crop = { -1, -1, -1, -1 }; + struct v4l2_rect compose = crop; struct v4l2_fract interval = { 0, 0 }; unsigned int i; char *end; int ret; - pad = v4l2_subdev_parse_pad_format(media, &format, &crop, &interval, - p, &end); + pad = v4l2_subdev_parse_pad_format(media, &format, &crop, &compose, + &interval, p, &end); if (pad == NULL) { media_dbg(media, "Unable to parse format\n"); return -EINVAL; @@ -490,6 +500,10 @@ static int v4l2_subdev_parse_setup_format(struct media_device *media, if (ret < 0) return ret; + ret = set_selection(pad, V4L2_SUBDEV_SEL_TGT_COMPOSE_ACTUAL, &compose); + if (ret < 0) + return ret; + if (pad->flags & MEDIA_PAD_FL_SOURCE) { ret = set_format(pad, &format); if (ret < 0) -- 1.7.2.5 -- To unsubscribe fro
Re: Hauppage HVR1600 - CX18 Issue with Centos 6.2 - Analog Sound comes and goes
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 On 05/03/2012 07:38 PM, Andy Walls wrote: > On Wed, 2012-05-02 at 00:53 -0400, Bob Lightfoot wrote: >> Dear Mailing List linux-media: >> >> I am attempting to use a Hauppage HVR-1600 purchased new in 2010 >> as an analog tv tuner in my HP Pavillion Elite M9040n PC running >> Centos 6.2 x86_64. The problem I am experiencing is that with >> every kernel update and/or mythtv and/or vlc or other media >> update it seems I loose sound on my captured avi/mpeg files. >> After as bit of tweaking it seems to come back and I've never >> been able to pin down exactly what is hosing the sound. I should >> mention the unit has an HVR 1850 at slot 2 which works for DVB >> tuning jsut fine. The HVR 1600 is in pci slot 1 and from what I >> can see in dmesg it also loaded fine. Maybe someone who is more >> intimate with linux-media can review the data I've included and >> suggest a troubleshooting approach. > > 1. If you ever lose sound in the ATSC or QAM DTV streams captured > with the HVR-1600, then you do not have and HVR-1600 problem, you > have a systems sound playback problem. In this case you must > address that problem. > > If not, then go on to #2. > > 2. If you never lose sound in ATSC/QAM DTV captures, but do > sometimes lose sound with MPEG captures from the analog baseband > CVBS or S-Video w/ L and R audio inputs, then this is a driver > problem with the CX23418's audio processing unit (APU). > > In this case there is are a few things to try: > > a. prevent the cx18-alsa.ko module from loading by removing it from > your filesystem (make a back-up of the module if you wish), and > reboot your computer. This will stop things like HAL and/or > PulseAudio from messing with the HVR-1600 via the ALSA sound > interface. > > b. Update to the laters cx18 driver, which will require updating > many supporting media (video, dvb and common/tuner modules as well. > (No guarantee this will work right on older enterprise kernels > where the I2C binding model is very different from modern > kernels.) > > c. Write a patch to the cx18 driver that has it act a little > smarter about the CX23418 Capture Processing Unit (CPU) and Audio > Processing Unit (APU) initialzation. Right now the processors are > brought out of reset and allowed to run executing uninitialized > memory as instructions before their firmware is actually loaded and > the processors restarted. > > d. Ask me to write the patch mentioned in c. Be prepared to wait a > very long time and still have to update to the latest cx18 module. > > > If you never lose audip in MPEG captures from baseband inputs, then > go to step 3. > > 3. If you never lose sound in ATSC/QAM DTV captures, and never > lose sound with MPEG captures from the analog baseband CVBS or > S-Video w/ L and R audio inputs, but you do sometimes lose audio > with MPEG captures from the analog RF tuner, then the broadcast > audio microcontroller in the integrated CX25843 inside the CX23418 > is likely unable to identify the broadcast audio standard properly > and is staying muted. > > If so, then > > a. Use 'v4l2-ctl -d /dev/videoN --log-status' to verify the audio > standard is not detected and the microcontroller is muted when an > analog RF capture is ongoing. > > b. Try installing an in-line attenuator in the RF line before it > reaches the analog RF tuner input of the HVR-1600. The audio > microcontroller uses spectral analysis hardware to detect the > broadcast audio standard. Intermodulation products, caused by > overdriving the tuner with too strong of a signal, can throw off > the spectral analysis and confuse the audio standard detection > microcontroller. > > c. Ask Mark Lord for a copy of his script/tool mentioned in this > long thread: http://patchwork.linuxtv.org/patch/3162/ That > periodically does some userspace actions to try and get audio > back. > > d. Write a patch to the cx18 driver and the cx18-av-*c files > specifically, that allows manual specification of audio standard to > BTSC without any attaempts at auto-detection. > > e. Ask me to write the patch in d. Be prepared to wait a long > time, etc. etc. > > f. See 2.c. > > g. See 2.d. > > > >> I am beginning to suspect I need to specify a conf file for >> module cx18 but not sure where to begin that. I am trying to >> maintain the package management on this system so I have not >> isntalled sources or compiled anything, everything has been >> managed by yum and pulled from the centos-base, centos-updates or >> atrpms repos for 99% of things. There may be an elrepo or >> rpmfusion rpm or two, but they would be an exception. Below I am >> providing what I think is the relevant starter information. >> >> >> uname -a ==> Linux mythbox.ladodomain 2.6.32-220.13.1.el6.x86_64 >> #1 SMP Tue Apr 17 23:56:34 BST 2012 x86_64 x86_64 x86_64 >> GNU/Linux >> >> lspci output follows: >> >> 00:00.0 Host bridge: Intel Corporation 82G33/G31/P35/P31 Express >> D
Re: logitech quickcam 9000 uvcdynctrl broken since kernel 3.2 - PING
p.s. Some of my commit messages talk about them needing some kernel changes / fixes. These are all long in place now (since before the uvcvideo.h header become an official userspace available kernel header). Regards, Hans -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: logitech quickcam 9000 uvcdynctrl broken since kernel 3.2 - PING
Hi Paulo, I've also done some work on libwebcam a while ago, but have not yet had the time to send this to Martin Rubli. Attached are git format-patch patches against the 0.2.1 branch of svn. Note these are against what was in that branch when I did this work some months ago, so not sure if it will still apply cleanly. I would really like to work together with you on getting an updated version of libwebcam out there for use in distros (I maintain libwebcam in Fedora, and AFAIK you maintain it in Debian, right?) My sourceforge.net account is jwrdegoede, I hope you're willing to give me commit access to the git repo there. I guess if there is going to be more then 1 of us working on the git repo we should have some review procedure. If others don't object we could post patches to linux-media, prefixing the subject with a [PATCH libwebcam] and then do reviews on linux-media and push only after an ack? I guess we could start with that right away with my proposed patches, if you can make an initial git repo available I can rebase on top of that and then send the patches with git send-email (so 1 patch / mail) for review? Either way thanks for working on this! Regards, Hans On 05/03/2012 04:17 PM, Paulo Assis wrote: Karl Hi, I'm setting up a libwebcam git repo in sourceforge, Martin Rubli from logitech (the libwebcam developer), was kind enough to post me all it's code and the old svn repo backup. He had already done some fixes regarding the new ioctls for version 0.3, so I just need to go through that and add add them to 0.2. I still need to check with him how he wants to handle the 0.3 version, since it has a lot of new code ( and some extra apps ). Regards, Paulo 2012/5/3 Karl Kiniger: Hi Paulo, On Wed 120502, Paulo Assis wrote: OK, so UVCIOC_CTRL_ADD is no longer available, now we have: UVCIOC_CTRL_MAP and UVCIOC_CTRL_QUERY, so I guess some changes are needed, I'll try to fix this ASAP. compiled libwebcam-0.2.1 from Ubuntu (had to fight against CMake - I am almost CMake agnostic so far...) and I got the manual focus control in guvcview so things are definitely looking better now. So far I have got a focus slider and a LED1 frequency slider, but not a LED mode... forgot what exactly was available in the past. --- LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/uvcdynctrl -i /usr/share/uvcdynctrl/data/046d/logitech.xml [libwebcam] Unsupported V4L2_CID_EXPOSURE_AUTO control with a non-contiguous range of choice IDs found [libwebcam] Invalid or unsupported V4L2 control encountered: ctrl_id = 0x009A0901, name = 'Exposure, Auto' Importing dynamic controls from file /usr/share/uvcdynctrl/data/046d/logitech.xml. /usr/share/uvcdynctrl/data/046d/logitech.xml: error: video0: unable to map 'Pan (relative)' control. ioctl(UVCIOC_CTRL_MAP) failed with return value -1 (error 2: No such file or directory) /usr/share/uvcdynctrl/data/046d/logitech.xml: error: video0: unable to map 'Tilt (relative)' control. ioctl(UVCIOC_CTRL_MAP) failed with return value -1 (error 2: No such file or directory) /usr/share/uvcdynctrl/data/046d/logitech.xml:354: error: Invalid V4L2 control type specified: 'V4L2_CTRL_TYPE_BUTTON' /usr/share/uvcdynctrl/data/046d/logitech.xml:368: error: Invalid V4L2 control type specified: 'V4L2_CTRL_TYPE_BUTTON' /usr/share/uvcdynctrl/data/046d/logitech.xml:396: error: Invalid V4L2 control type specified: 'V4L2_CTRL_TYPE_MENU' Thanks again, Karl Regards, Paulo -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html >From 72d835008c1712a8b19427e540de82527d75 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Sun, 16 May 2010 11:17:22 +0200 Subject: [PATCH 01/10] Support mapping button controls --- libwebcam/dynctrl.c |6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libwebcam/dynctrl.c b/libwebcam/dynctrl.c index 229bdc4..78e67ff 100644 --- a/libwebcam/dynctrl.c +++ b/libwebcam/dynctrl.c @@ -422,6 +422,9 @@ static enum v4l2_ctrl_type get_v4l2_ctrl_type_by_name (const xmlChar *name) else if(xmlStrEqual(name, BAD_CAST("V4L2_CTRL_TYPE_BOOLEAN"))) { type = V4L2_CTRL_TYPE_BOOLEAN; } + else if(xmlStrEqual(name, BAD_CAST("V4L2_CTRL_TYPE_BUTTON"))) { + type = V4L2_CTRL_TYPE_BUTTON; + } #ifdef ENABLE_RAW_CONTROLS else if(xmlStrEqual(name, BAD_CAST("V4L2_CTRL_TYPE_STRING"))) { type = V4L2_CTRL_TYPE_STRING; @@ -431,9 +434,6 @@ static enum v4l2_ctrl_type get_v4l2_ctrl_type_by_name (const xmlChar *name) else if(xmlStrEqual(name, BAD_CAST("V4L2_CTRL_TYPE_MENU"))) { type = V4L2_CTRL_TYPE_MENU; } - else if(xmlStrEqual(name, BAD_CAST("V4L2_CTRL_TYPE_BUTTON"))) { - type = V4L2_CTRL_TYPE_BUTTON; - } else if(xmlStrEqual(name, BAD_CAST("V4L2_CTRL_TYPE_INTEGER64"))) { type = V4L2_CTRL_TYPE_INTEGER64; } -- 1.7.10 >From a7d6ef016e9eed900d5950f122cef886e1ee7a5d Mon Sep 17 00:00:00 2001