Em 18-09-2012 05:35, javier Martin escreveu: > On 17 September 2012 15:59, Guennadi Liakhovetski <g.liakhovet...@gmx.de> > wrote: >> On Mon, 17 Sep 2012, javier Martin wrote: >> >>> Hi Shawn, >>> >>> On 17 September 2012 11:21, Guennadi Liakhovetski <g.liakhovet...@gmx.de> >>> wrote: >>>> On Mon, 17 Sep 2012, Shawn Guo wrote: >>>> >>>>> It changes the driver to use platform_device_id rather than cpu_is_xxx >>>>> to determine the controller type, and updates the platform code >>>>> accordingly. >>>>> >>>>> As the result, mach/hardware.h inclusion gets removed from the driver. >>>>> >>>>> Signed-off-by: Shawn Guo <shawn....@linaro.org> >>>>> Cc: Guennadi Liakhovetski <g.liakhovet...@gmx.de> >>>>> Cc: linux-media@vger.kernel.org >>>> > > Tested-by: Javier Martin <javier.mar...@vista-silicon.com>
I'm understanding that this patch will flow through arm tree[1]. So: Acked-by: Mauro Carvalho Chehab <mche...@redhat.com> [1] if you understand otherwise, I can apply it via my tree as well > >>>> Acked-by: Guennadi Liakhovetski <g.liakhovet...@gmx.de> >>> >>> i.MX25 support is broken and is scheduled for removal. >> >> It is not yet, I haven't pushed those your patches yet. >> >> Thanks >> Guennadi >> >>> I think we should not keep on trying to maintain it. Couldn't we just >>> drop it? It only makes maintenance tasks more difficult. >>> >>>> Thanks >>>> Guennadi >>>> >>>>> --- >>>>> arch/arm/mach-imx/clk-imx25.c | 6 +- >>>>> arch/arm/mach-imx/clk-imx27.c | 6 +- >>>>> arch/arm/mach-imx/devices/devices-common.h | 1 + >>>>> arch/arm/mach-imx/devices/platform-mx2-camera.c | 12 +-- >>>>> drivers/media/video/mx2_camera.c | 95 >>>>> +++++++++++++++++------ >>>>> 5 files changed, 85 insertions(+), 35 deletions(-) >>>>> >>>>> diff --git a/arch/arm/mach-imx/clk-imx25.c b/arch/arm/mach-imx/clk-imx25.c >>>>> index 1aea073..71fe521 100644 >>>>> --- a/arch/arm/mach-imx/clk-imx25.c >>>>> +++ b/arch/arm/mach-imx/clk-imx25.c >>>>> @@ -231,9 +231,9 @@ int __init mx25_clocks_init(void) >>>>> clk_register_clkdev(clk[esdhc2_ipg_per], "per", >>>>> "sdhci-esdhc-imx25.1"); >>>>> clk_register_clkdev(clk[esdhc2_ipg], "ipg", "sdhci-esdhc-imx25.1"); >>>>> clk_register_clkdev(clk[esdhc2_ahb], "ahb", "sdhci-esdhc-imx25.1"); >>>>> - clk_register_clkdev(clk[csi_ipg_per], "per", "mx2-camera.0"); >>>>> - clk_register_clkdev(clk[csi_ipg], "ipg", "mx2-camera.0"); >>>>> - clk_register_clkdev(clk[csi_ahb], "ahb", "mx2-camera.0"); >>>>> + clk_register_clkdev(clk[csi_ipg_per], "per", "imx25-camera.0"); >>>>> + clk_register_clkdev(clk[csi_ipg], "ipg", "imx25-camera.0"); >>>>> + clk_register_clkdev(clk[csi_ahb], "ahb", "imx25-camera.0"); >>>>> clk_register_clkdev(clk[dummy], "audmux", NULL); >>>>> clk_register_clkdev(clk[can1_ipg], NULL, "flexcan.0"); >>>>> clk_register_clkdev(clk[can2_ipg], NULL, "flexcan.1"); >>>>> diff --git a/arch/arm/mach-imx/clk-imx27.c b/arch/arm/mach-imx/clk-imx27.c >>>>> index 5ff5cf0..e26de52 100644 >>>>> --- a/arch/arm/mach-imx/clk-imx27.c >>>>> +++ b/arch/arm/mach-imx/clk-imx27.c >>>>> @@ -224,7 +224,7 @@ int __init mx27_clocks_init(unsigned long fref) >>>>> clk_register_clkdev(clk[per3_gate], "per", "imx-fb.0"); >>>>> clk_register_clkdev(clk[lcdc_ipg_gate], "ipg", "imx-fb.0"); >>>>> clk_register_clkdev(clk[lcdc_ahb_gate], "ahb", "imx-fb.0"); >>>>> - clk_register_clkdev(clk[csi_ahb_gate], "ahb", "mx2-camera.0"); >>>>> + clk_register_clkdev(clk[csi_ahb_gate], "ahb", "imx27-camera.0"); >>>>> clk_register_clkdev(clk[usb_div], "per", "fsl-usb2-udc"); >>>>> clk_register_clkdev(clk[usb_ipg_gate], "ipg", "fsl-usb2-udc"); >>>>> clk_register_clkdev(clk[usb_ahb_gate], "ahb", "fsl-usb2-udc"); >>>>> @@ -251,8 +251,8 @@ int __init mx27_clocks_init(unsigned long fref) >>>>> clk_register_clkdev(clk[i2c2_ipg_gate], NULL, "imx21-i2c.1"); >>>>> clk_register_clkdev(clk[owire_ipg_gate], NULL, "mxc_w1.0"); >>>>> clk_register_clkdev(clk[kpp_ipg_gate], NULL, "imx-keypad"); >>>>> - clk_register_clkdev(clk[emma_ahb_gate], "emma-ahb", "mx2-camera.0"); >>>>> - clk_register_clkdev(clk[emma_ipg_gate], "emma-ipg", "mx2-camera.0"); >>>>> + clk_register_clkdev(clk[emma_ahb_gate], "emma-ahb", >>>>> "imx27-camera.0"); >>>>> + clk_register_clkdev(clk[emma_ipg_gate], "emma-ipg", >>>>> "imx27-camera.0"); >>>>> clk_register_clkdev(clk[emma_ahb_gate], "ahb", "m2m-emmaprp.0"); >>>>> clk_register_clkdev(clk[emma_ipg_gate], "ipg", "m2m-emmaprp.0"); >>>>> clk_register_clkdev(clk[iim_ipg_gate], "iim", NULL); >>>>> diff --git a/arch/arm/mach-imx/devices/devices-common.h >>>>> b/arch/arm/mach-imx/devices/devices-common.h >>>>> index 7f2698c..8112a1a 100644 >>>>> --- a/arch/arm/mach-imx/devices/devices-common.h >>>>> +++ b/arch/arm/mach-imx/devices/devices-common.h >>>>> @@ -202,6 +202,7 @@ struct platform_device *__init imx_add_mx3_sdc_fb( >>>>> >>>>> #include <linux/platform_data/camera-mx2.h> >>>>> struct imx_mx2_camera_data { >>>>> + const char *devid; >>>>> resource_size_t iobasecsi; >>>>> resource_size_t iosizecsi; >>>>> resource_size_t irqcsi; >>>>> diff --git a/arch/arm/mach-imx/devices/platform-mx2-camera.c >>>>> b/arch/arm/mach-imx/devices/platform-mx2-camera.c >>>>> index 9ad5b2d..b88877d 100644 >>>>> --- a/arch/arm/mach-imx/devices/platform-mx2-camera.c >>>>> +++ b/arch/arm/mach-imx/devices/platform-mx2-camera.c >>>>> @@ -9,14 +9,16 @@ >>>>> #include <mach/hardware.h> >>>>> #include "devices-common.h" >>>>> >>>>> -#define imx_mx2_camera_data_entry_single(soc) >>>>> \ >>>>> +#define imx_mx2_camera_data_entry_single(soc, _devid) >>>>> \ >>>>> { \ >>>>> + .devid = _devid, \ >>>>> .iobasecsi = soc ## _CSI_BASE_ADDR, \ >>>>> .iosizecsi = SZ_4K, \ >>>>> .irqcsi = soc ## _INT_CSI, \ >>>>> } >>>>> -#define imx_mx2_camera_data_entry_single_emma(soc) \ >>>>> +#define imx_mx2_camera_data_entry_single_emma(soc, _devid) \ >>>>> { \ >>>>> + .devid = _devid, \ >>>>> .iobasecsi = soc ## _CSI_BASE_ADDR, \ >>>>> .iosizecsi = SZ_32, \ >>>>> .irqcsi = soc ## _INT_CSI, \ >>>>> @@ -27,12 +29,12 @@ >>>>> >>>>> #ifdef CONFIG_SOC_IMX25 >>>>> const struct imx_mx2_camera_data imx25_mx2_camera_data __initconst = >>>>> - imx_mx2_camera_data_entry_single(MX25); >>>>> + imx_mx2_camera_data_entry_single(MX25, "imx25-camera"); >>>>> #endif /* ifdef CONFIG_SOC_IMX25 */ >>>>> >>>>> #ifdef CONFIG_SOC_IMX27 >>>>> const struct imx_mx2_camera_data imx27_mx2_camera_data __initconst = >>>>> - imx_mx2_camera_data_entry_single_emma(MX27); >>>>> + imx_mx2_camera_data_entry_single_emma(MX27, "imx27-camera"); >>>>> #endif /* ifdef CONFIG_SOC_IMX27 */ >>>>> >>>>> struct platform_device *__init imx_add_mx2_camera( >>>>> @@ -58,7 +60,7 @@ struct platform_device *__init imx_add_mx2_camera( >>>>> .flags = IORESOURCE_IRQ, >>>>> }, >>>>> }; >>>>> - return imx_add_platform_device_dmamask("mx2-camera", 0, >>>>> + return imx_add_platform_device_dmamask(data->devid, 0, >>>>> res, data->iobaseemmaprp ? 4 : 2, >>>>> pdata, sizeof(*pdata), DMA_BIT_MASK(32)); >>>>> } >>>>> diff --git a/drivers/media/video/mx2_camera.c >>>>> b/drivers/media/video/mx2_camera.c >>>>> index fe4c76c..cde3374 100644 >>>>> --- a/drivers/media/video/mx2_camera.c >>>>> +++ b/drivers/media/video/mx2_camera.c >>>>> @@ -41,7 +41,6 @@ >>>>> #include <linux/videodev2.h> >>>>> >>>>> #include <linux/platform_data/camera-mx2.h> >>>>> -#include <mach/hardware.h> >>>>> >>>>> #include <asm/dma.h> >>>>> >>>>> @@ -121,11 +120,13 @@ >>>>> >>>>> #define CSICR1 0x00 >>>>> #define CSICR2 0x04 >>>>> -#define CSISR (cpu_is_mx27() ? 0x08 : 0x18) >>>>> +#define CSISR_IMX25 0x18 >>>>> +#define CSISR_IMX27 0x08 >>>>> #define CSISTATFIFO 0x0c >>>>> #define CSIRFIFO 0x10 >>>>> #define CSIRXCNT 0x14 >>>>> -#define CSICR3 (cpu_is_mx27() ? 0x1C : 0x08) >>>>> +#define CSICR3_IMX25 0x08 >>>>> +#define CSICR3_IMX27 0x1c >>>>> #define CSIDMASA_STATFIFO 0x20 >>>>> #define CSIDMATA_STATFIFO 0x24 >>>>> #define CSIDMASA_FB1 0x28 >>>>> @@ -268,6 +269,11 @@ struct mx2_buffer { >>>>> struct mx2_buf_internal internal; >>>>> }; >>>>> >>>>> +enum mx2_camera_type { >>>>> + IMX25_CAMERA, >>>>> + IMX27_CAMERA, >>>>> +}; >>>>> + >>>>> struct mx2_camera_dev { >>>>> struct device *dev; >>>>> struct soc_camera_host soc_host; >>>>> @@ -291,6 +297,9 @@ struct mx2_camera_dev { >>>>> struct mx2_buffer *fb2_active; >>>>> >>>>> u32 csicr1; >>>>> + u32 reg_csisr; >>>>> + u32 reg_csicr3; >>>>> + enum mx2_camera_type devtype; >>>>> >>>>> struct mx2_buf_internal buf_discard[2]; >>>>> void *discard_buffer; >>>>> @@ -303,6 +312,29 @@ struct mx2_camera_dev { >>>>> struct vb2_alloc_ctx *alloc_ctx; >>>>> }; >>>>> >>>>> +static struct platform_device_id mx2_camera_devtype[] = { >>>>> + { >>>>> + .name = "imx25-camera", >>>>> + .driver_data = IMX25_CAMERA, >>>>> + }, { >>>>> + .name = "imx27-camera", >>>>> + .driver_data = IMX27_CAMERA, >>>>> + }, { >>>>> + /* sentinel */ >>>>> + } >>>>> +}; >>>>> +MODULE_DEVICE_TABLE(platform, mx2_camera_devtype); >>>>> + >>>>> +static inline int is_imx25_camera(struct mx2_camera_dev *pcdev) >>>>> +{ >>>>> + return pcdev->devtype == IMX25_CAMERA; >>>>> +} >>>>> + >>>>> +static inline int is_imx27_camera(struct mx2_camera_dev *pcdev) >>>>> +{ >>>>> + return pcdev->devtype == IMX27_CAMERA; >>>>> +} >>>>> + >>>>> static struct mx2_buffer *mx2_ibuf_to_buf(struct mx2_buf_internal >>>>> *int_buf) >>>>> { >>>>> return container_of(int_buf, struct mx2_buffer, internal); >>>>> @@ -406,9 +438,9 @@ static void mx2_camera_deactivate(struct >>>>> mx2_camera_dev *pcdev) >>>>> >>>>> clk_disable_unprepare(pcdev->clk_csi); >>>>> writel(0, pcdev->base_csi + CSICR1); >>>>> - if (cpu_is_mx27()) { >>>>> + if (is_imx27_camera(pcdev)) { >>>>> writel(0, pcdev->base_emma + PRP_CNTL); >>>>> - } else if (cpu_is_mx25()) { >>>>> + } else if (is_imx25_camera(pcdev)) { >>>>> spin_lock_irqsave(&pcdev->lock, flags); >>>>> pcdev->fb1_active = NULL; >>>>> pcdev->fb2_active = NULL; >>>>> @@ -438,7 +470,7 @@ static int mx2_camera_add_device(struct >>>>> soc_camera_device *icd) >>>>> >>>>> csicr1 = CSICR1_MCLKEN; >>>>> >>>>> - if (cpu_is_mx27()) >>>>> + if (is_imx27_camera(pcdev)) >>>>> csicr1 |= CSICR1_PRP_IF_EN | CSICR1_FCC | >>>>> CSICR1_RXFF_LEVEL(0); >>>>> >>>>> @@ -514,7 +546,7 @@ out: >>>>> static irqreturn_t mx25_camera_irq(int irq_csi, void *data) >>>>> { >>>>> struct mx2_camera_dev *pcdev = data; >>>>> - u32 status = readl(pcdev->base_csi + CSISR); >>>>> + u32 status = readl(pcdev->base_csi + pcdev->reg_csisr); >>>>> >>>>> if (status & CSISR_DMA_TSF_FB1_INT) >>>>> mx25_camera_frame_done(pcdev, 1, MX2_STATE_DONE); >>>>> @@ -523,7 +555,7 @@ static irqreturn_t mx25_camera_irq(int irq_csi, void >>>>> *data) >>>>> >>>>> /* FIXME: handle CSISR_RFF_OR_INT */ >>>>> >>>>> - writel(status, pcdev->base_csi + CSISR); >>>>> + writel(status, pcdev->base_csi + pcdev->reg_csisr); >>>>> >>>>> return IRQ_HANDLED; >>>>> } >>>>> @@ -608,7 +640,7 @@ static void mx2_videobuf_queue(struct vb2_buffer *vb) >>>>> buf->state = MX2_STATE_QUEUED; >>>>> list_add_tail(&buf->internal.queue, &pcdev->capture); >>>>> >>>>> - if (cpu_is_mx25()) { >>>>> + if (is_imx25_camera(pcdev)) { >>>>> u32 csicr3, dma_inten = 0; >>>>> >>>>> if (pcdev->fb1_active == NULL) { >>>>> @@ -627,20 +659,20 @@ static void mx2_videobuf_queue(struct vb2_buffer >>>>> *vb) >>>>> list_del(&buf->internal.queue); >>>>> buf->state = MX2_STATE_ACTIVE; >>>>> >>>>> - csicr3 = readl(pcdev->base_csi + CSICR3); >>>>> + csicr3 = readl(pcdev->base_csi + pcdev->reg_csicr3); >>>>> >>>>> /* Reflash DMA */ >>>>> writel(csicr3 | CSICR3_DMA_REFLASH_RFF, >>>>> - pcdev->base_csi + CSICR3); >>>>> + pcdev->base_csi + >>>>> pcdev->reg_csicr3); >>>>> >>>>> /* clear & enable interrupts */ >>>>> - writel(dma_inten, pcdev->base_csi + CSISR); >>>>> + writel(dma_inten, pcdev->base_csi + >>>>> pcdev->reg_csisr); >>>>> pcdev->csicr1 |= dma_inten; >>>>> writel(pcdev->csicr1, pcdev->base_csi + CSICR1); >>>>> >>>>> /* enable DMA */ >>>>> csicr3 |= CSICR3_DMA_REQ_EN_RFF | >>>>> CSICR3_RXFF_LEVEL(1); >>>>> - writel(csicr3, pcdev->base_csi + CSICR3); >>>>> + writel(csicr3, pcdev->base_csi + pcdev->reg_csicr3); >>>>> } >>>>> } >>>>> >>>>> @@ -684,7 +716,7 @@ static void mx2_videobuf_release(struct vb2_buffer >>>>> *vb) >>>>> */ >>>>> >>>>> spin_lock_irqsave(&pcdev->lock, flags); >>>>> - if (cpu_is_mx25() && buf->state == MX2_STATE_ACTIVE) { >>>>> + if (is_imx25_camera(pcdev) && buf->state == MX2_STATE_ACTIVE) { >>>>> if (pcdev->fb1_active == buf) { >>>>> pcdev->csicr1 &= ~CSICR1_FB1_DMA_INTEN; >>>>> writel(0, pcdev->base_csi + CSIDMASA_FB1); >>>>> @@ -807,7 +839,7 @@ static int mx2_start_streaming(struct vb2_queue *q, >>>>> unsigned int count) >>>>> unsigned long phys; >>>>> int bytesperline; >>>>> >>>>> - if (cpu_is_mx27()) { >>>>> + if (is_imx27_camera(pcdev)) { >>>>> unsigned long flags; >>>>> if (count < 2) >>>>> return -EINVAL; >>>>> @@ -902,7 +934,7 @@ static int mx2_stop_streaming(struct vb2_queue *q) >>>>> void *b; >>>>> u32 cntl; >>>>> >>>>> - if (cpu_is_mx27()) { >>>>> + if (is_imx27_camera(pcdev)) { >>>>> spin_lock_irqsave(&pcdev->lock, flags); >>>>> >>>>> cntl = readl(pcdev->base_emma + PRP_CNTL); >>>>> @@ -1054,11 +1086,11 @@ static int mx2_camera_set_bus_param(struct >>>>> soc_camera_device *icd) >>>>> if (bytesperline < 0) >>>>> return bytesperline; >>>>> >>>>> - if (cpu_is_mx27()) { >>>>> + if (is_imx27_camera(pcdev)) { >>>>> ret = mx27_camera_emma_prp_reset(pcdev); >>>>> if (ret) >>>>> return ret; >>>>> - } else if (cpu_is_mx25()) { >>>>> + } else if (is_imx25_camera(pcdev)) { >>>>> writel((bytesperline * icd->user_height) >> 2, >>>>> pcdev->base_csi + CSIRXCNT); >>>>> writel((bytesperline << 16) | icd->user_height, >>>>> @@ -1351,7 +1383,7 @@ static int mx2_camera_try_fmt(struct >>>>> soc_camera_device *icd, >>>>> /* FIXME: implement MX27 limits */ >>>>> >>>>> /* limit to MX25 hardware capabilities */ >>>>> - if (cpu_is_mx25()) { >>>>> + if (is_imx25_camera(pcdev)) { >>>>> if (xlate->host_fmt->bits_per_sample <= 8) >>>>> width_limit = 0xffff * 4; >>>>> else >>>>> @@ -1685,6 +1717,20 @@ static int __devinit mx2_camera_probe(struct >>>>> platform_device *pdev) >>>>> goto exit; >>>>> } >>>>> >>>>> + pcdev->devtype = pdev->id_entry->driver_data; >>>>> + switch (pcdev->devtype) { >>>>> + case IMX25_CAMERA: >>>>> + pcdev->reg_csisr = CSISR_IMX25; >>>>> + pcdev->reg_csicr3 = CSICR3_IMX25; >>>>> + break; >>>>> + case IMX27_CAMERA: >>>>> + pcdev->reg_csisr = CSISR_IMX27; >>>>> + pcdev->reg_csicr3 = CSICR3_IMX27; >>>>> + break; >>>>> + default: >>>>> + break; >>>>> + } >>>>> + >>>>> pcdev->clk_csi = devm_clk_get(&pdev->dev, "ahb"); >>>>> if (IS_ERR(pcdev->clk_csi)) { >>>>> dev_err(&pdev->dev, "Could not get csi clock\n"); >>>>> @@ -1722,7 +1768,7 @@ static int __devinit mx2_camera_probe(struct >>>>> platform_device *pdev) >>>>> pcdev->dev = &pdev->dev; >>>>> platform_set_drvdata(pdev, pcdev); >>>>> >>>>> - if (cpu_is_mx25()) { >>>>> + if (is_imx25_camera(pcdev)) { >>>>> err = devm_request_irq(&pdev->dev, irq_csi, >>>>> mx25_camera_irq, 0, >>>>> MX2_CAM_DRV_NAME, pcdev); >>>>> if (err) { >>>>> @@ -1731,7 +1777,7 @@ static int __devinit mx2_camera_probe(struct >>>>> platform_device *pdev) >>>>> } >>>>> } >>>>> >>>>> - if (cpu_is_mx27()) { >>>>> + if (is_imx27_camera(pcdev)) { >>>>> err = mx27_camera_emma_init(pdev); >>>>> if (err) >>>>> goto exit; >>>>> @@ -1742,7 +1788,7 @@ static int __devinit mx2_camera_probe(struct >>>>> platform_device *pdev) >>>>> pcdev->soc_host.priv = pcdev; >>>>> pcdev->soc_host.v4l2_dev.dev = &pdev->dev; >>>>> pcdev->soc_host.nr = pdev->id; >>>>> - if (cpu_is_mx25()) >>>>> + if (is_imx25_camera(pcdev)) >>>>> pcdev->soc_host.capabilities = SOCAM_HOST_CAP_STRIDE; >>>>> >>>>> pcdev->alloc_ctx = vb2_dma_contig_init_ctx(&pdev->dev); >>>>> @@ -1762,7 +1808,7 @@ static int __devinit mx2_camera_probe(struct >>>>> platform_device *pdev) >>>>> exit_free_emma: >>>>> vb2_dma_contig_cleanup_ctx(pcdev->alloc_ctx); >>>>> eallocctx: >>>>> - if (cpu_is_mx27()) { >>>>> + if (is_imx27_camera(pcdev)) { >>>>> clk_disable_unprepare(pcdev->clk_emma_ipg); >>>>> clk_disable_unprepare(pcdev->clk_emma_ahb); >>>>> } >>>>> @@ -1780,7 +1826,7 @@ static int __devexit mx2_camera_remove(struct >>>>> platform_device *pdev) >>>>> >>>>> vb2_dma_contig_cleanup_ctx(pcdev->alloc_ctx); >>>>> >>>>> - if (cpu_is_mx27()) { >>>>> + if (is_imx27_camera(pcdev)) { >>>>> clk_disable_unprepare(pcdev->clk_emma_ipg); >>>>> clk_disable_unprepare(pcdev->clk_emma_ahb); >>>>> } >>>>> @@ -1794,6 +1840,7 @@ static struct platform_driver mx2_camera_driver = { >>>>> .driver = { >>>>> .name = MX2_CAM_DRV_NAME, >>>>> }, >>>>> + .id_table = mx2_camera_devtype, >>>>> .remove = __devexit_p(mx2_camera_remove), >>>>> }; >>>>> >>>>> -- >>>>> 1.7.9.5 >>> >>> I can't test this patch because it depends heavily on the previous >>> one, which breaks the driver. >>> >>> Regards. >>> >>> -- >>> Javier Martin >>> Vista Silicon S.L. >>> CDTUC - FASE C - Oficina S-345 >>> Avda de los Castros s/n >>> 39005- Santander. Cantabria. Spain >>> +34 942 25 32 60 >>> www.vista-silicon.com >>> >> >> --- >> Guennadi Liakhovetski, Ph.D. >> Freelance Open-Source Software Developer >> http://www.open-technology.de/ >> -- >> 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