From e5d49a3ef4bb352a1799c25b2fab5c5c57ca9526 Mon Sep 17 00:00:00 2001 From: Koji Matsuoka Date: Tue, 14 Oct 2014 03:24:38 -0300 Subject: [PATCH 01/17] [media] rcar_vin: Add YUYV capture format support Signed-off-by: Koji Matsuoka Signed-off-by: Yoshihiro Kaneko Signed-off-by: Guennadi Liakhovetski Signed-off-by: Mauro Carvalho Chehab --- drivers/media/platform/soc_camera/rcar_vin.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/media/platform/soc_camera/rcar_vin.c b/drivers/media/platform/soc_camera/rcar_vin.c index 8d8438b10b87..0891679ab835 100644 --- a/drivers/media/platform/soc_camera/rcar_vin.c +++ b/drivers/media/platform/soc_camera/rcar_vin.c @@ -879,6 +879,14 @@ static const struct soc_mbus_pixelfmt rcar_vin_formats[] = { .order = SOC_MBUS_ORDER_LE, .layout = SOC_MBUS_LAYOUT_PLANAR_Y_C, }, + { + .fourcc = V4L2_PIX_FMT_YUYV, + .name = "YUYV", + .bits_per_sample = 16, + .packing = SOC_MBUS_PACKING_NONE, + .order = SOC_MBUS_ORDER_LE, + .layout = SOC_MBUS_LAYOUT_PACKED, + }, { .fourcc = V4L2_PIX_FMT_UYVY, .name = "UYVY", From 76deaff8085304e9f6a4ce165b61ff467bbcd888 Mon Sep 17 00:00:00 2001 From: Yoshihiro Kaneko Date: Sun, 19 Oct 2014 23:51:29 -0300 Subject: [PATCH 02/17] [media] rcar_vin: Add DT support for r8a7793 and r8a7794 SoCs Based on platform device work by Matsuoka-san. Signed-off-by: Yoshihiro Kaneko Signed-off-by: Guennadi Liakhovetski Signed-off-by: Mauro Carvalho Chehab --- Documentation/devicetree/bindings/media/rcar_vin.txt | 2 ++ drivers/media/platform/soc_camera/rcar_vin.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Documentation/devicetree/bindings/media/rcar_vin.txt b/Documentation/devicetree/bindings/media/rcar_vin.txt index ba61782c2af9..9dafe6b06cd2 100644 --- a/Documentation/devicetree/bindings/media/rcar_vin.txt +++ b/Documentation/devicetree/bindings/media/rcar_vin.txt @@ -6,6 +6,8 @@ family of devices. The current blocks are always slaves and suppot one input channel which can be either RGB, YUYV or BT656. - compatible: Must be one of the following + - "renesas,vin-r8a7794" for the R8A7794 device + - "renesas,vin-r8a7793" for the R8A7793 device - "renesas,vin-r8a7791" for the R8A7791 device - "renesas,vin-r8a7790" for the R8A7790 device - "renesas,vin-r8a7779" for the R8A7779 device diff --git a/drivers/media/platform/soc_camera/rcar_vin.c b/drivers/media/platform/soc_camera/rcar_vin.c index 0891679ab835..c60560a4445a 100644 --- a/drivers/media/platform/soc_camera/rcar_vin.c +++ b/drivers/media/platform/soc_camera/rcar_vin.c @@ -1403,6 +1403,8 @@ static struct soc_camera_host_ops rcar_vin_host_ops = { #ifdef CONFIG_OF static struct of_device_id rcar_vin_of_table[] = { + { .compatible = "renesas,vin-r8a7794", .data = (void *)RCAR_GEN2 }, + { .compatible = "renesas,vin-r8a7793", .data = (void *)RCAR_GEN2 }, { .compatible = "renesas,vin-r8a7791", .data = (void *)RCAR_GEN2 }, { .compatible = "renesas,vin-r8a7790", .data = (void *)RCAR_GEN2 }, { .compatible = "renesas,vin-r8a7779", .data = (void *)RCAR_H1 }, From 4c28078c0eed3f9130f758e74934763207defa19 Mon Sep 17 00:00:00 2001 From: Koji Matsuoka Date: Tue, 21 Oct 2014 02:10:27 -0300 Subject: [PATCH 03/17] [media] rcar_vin: Add scaling support Signed-off-by: Koji Matsuoka Signed-off-by: Yoshihiro Kaneko [g.liakhovetski@gmx.de: minor stylistic and formatting corrections] Signed-off-by: Guennadi Liakhovetski Signed-off-by: Mauro Carvalho Chehab --- drivers/media/platform/soc_camera/rcar_vin.c | 451 ++++++++++++++++++- 1 file changed, 442 insertions(+), 9 deletions(-) diff --git a/drivers/media/platform/soc_camera/rcar_vin.c b/drivers/media/platform/soc_camera/rcar_vin.c index c60560a4445a..c71ef2b526a0 100644 --- a/drivers/media/platform/soc_camera/rcar_vin.c +++ b/drivers/media/platform/soc_camera/rcar_vin.c @@ -64,6 +64,30 @@ #define VNDMR_REG 0x58 /* Video n Data Mode Register */ #define VNDMR2_REG 0x5C /* Video n Data Mode Register 2 */ #define VNUVAOF_REG 0x60 /* Video n UV Address Offset Register */ +#define VNC1A_REG 0x80 /* Video n Coefficient Set C1A Register */ +#define VNC1B_REG 0x84 /* Video n Coefficient Set C1B Register */ +#define VNC1C_REG 0x88 /* Video n Coefficient Set C1C Register */ +#define VNC2A_REG 0x90 /* Video n Coefficient Set C2A Register */ +#define VNC2B_REG 0x94 /* Video n Coefficient Set C2B Register */ +#define VNC2C_REG 0x98 /* Video n Coefficient Set C2C Register */ +#define VNC3A_REG 0xA0 /* Video n Coefficient Set C3A Register */ +#define VNC3B_REG 0xA4 /* Video n Coefficient Set C3B Register */ +#define VNC3C_REG 0xA8 /* Video n Coefficient Set C3C Register */ +#define VNC4A_REG 0xB0 /* Video n Coefficient Set C4A Register */ +#define VNC4B_REG 0xB4 /* Video n Coefficient Set C4B Register */ +#define VNC4C_REG 0xB8 /* Video n Coefficient Set C4C Register */ +#define VNC5A_REG 0xC0 /* Video n Coefficient Set C5A Register */ +#define VNC5B_REG 0xC4 /* Video n Coefficient Set C5B Register */ +#define VNC5C_REG 0xC8 /* Video n Coefficient Set C5C Register */ +#define VNC6A_REG 0xD0 /* Video n Coefficient Set C6A Register */ +#define VNC6B_REG 0xD4 /* Video n Coefficient Set C6B Register */ +#define VNC6C_REG 0xD8 /* Video n Coefficient Set C6C Register */ +#define VNC7A_REG 0xE0 /* Video n Coefficient Set C7A Register */ +#define VNC7B_REG 0xE4 /* Video n Coefficient Set C7B Register */ +#define VNC7C_REG 0xE8 /* Video n Coefficient Set C7C Register */ +#define VNC8A_REG 0xF0 /* Video n Coefficient Set C8A Register */ +#define VNC8B_REG 0xF4 /* Video n Coefficient Set C8B Register */ +#define VNC8C_REG 0xF8 /* Video n Coefficient Set C8C Register */ /* Register bit fields for R-Car VIN */ /* Video n Main Control Register bits */ @@ -117,6 +141,324 @@ enum chip_id { RCAR_E1, }; +struct vin_coeff { + unsigned short xs_value; + u32 coeff_set[24]; +}; + +static const struct vin_coeff vin_coeff_set[] = { + { 0x0000, { + 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000 }, + }, + { 0x1000, { + 0x000fa400, 0x000fa400, 0x09625902, + 0x000003f8, 0x00000403, 0x3de0d9f0, + 0x001fffed, 0x00000804, 0x3cc1f9c3, + 0x001003de, 0x00000c01, 0x3cb34d7f, + 0x002003d2, 0x00000c00, 0x3d24a92d, + 0x00200bca, 0x00000bff, 0x3df600d2, + 0x002013cc, 0x000007ff, 0x3ed70c7e, + 0x00100fde, 0x00000000, 0x3f87c036 }, + }, + { 0x1200, { + 0x002ffff1, 0x002ffff1, 0x02a0a9c8, + 0x002003e7, 0x001ffffa, 0x000185bc, + 0x002007dc, 0x000003ff, 0x3e52859c, + 0x00200bd4, 0x00000002, 0x3d53996b, + 0x00100fd0, 0x00000403, 0x3d04ad2d, + 0x00000bd5, 0x00000403, 0x3d35ace7, + 0x3ff003e4, 0x00000801, 0x3dc674a1, + 0x3fffe800, 0x00000800, 0x3e76f461 }, + }, + { 0x1400, { + 0x00100be3, 0x00100be3, 0x04d1359a, + 0x00000fdb, 0x002003ed, 0x0211fd93, + 0x00000fd6, 0x002003f4, 0x0002d97b, + 0x000007d6, 0x002ffffb, 0x3e93b956, + 0x3ff003da, 0x001003ff, 0x3db49926, + 0x3fffefe9, 0x00100001, 0x3d655cee, + 0x3fffd400, 0x00000003, 0x3d65f4b6, + 0x000fb421, 0x00000402, 0x3dc6547e }, + }, + { 0x1600, { + 0x00000bdd, 0x00000bdd, 0x06519578, + 0x3ff007da, 0x00000be3, 0x03c24973, + 0x3ff003d9, 0x00000be9, 0x01b30d5f, + 0x3ffff7df, 0x001003f1, 0x0003c542, + 0x000fdfec, 0x001003f7, 0x3ec4711d, + 0x000fc400, 0x002ffffd, 0x3df504f1, + 0x001fa81a, 0x002ffc00, 0x3d957cc2, + 0x002f8c3c, 0x00100000, 0x3db5c891 }, + }, + { 0x1800, { + 0x3ff003dc, 0x3ff003dc, 0x0791e558, + 0x000ff7dd, 0x3ff007de, 0x05328554, + 0x000fe7e3, 0x3ff00be2, 0x03232546, + 0x000fd7ee, 0x000007e9, 0x0143bd30, + 0x001fb800, 0x000007ee, 0x00044511, + 0x002fa015, 0x000007f4, 0x3ef4bcee, + 0x002f8832, 0x001003f9, 0x3e4514c7, + 0x001f7853, 0x001003fd, 0x3de54c9f }, + }, + { 0x1a00, { + 0x000fefe0, 0x000fefe0, 0x08721d3c, + 0x001fdbe7, 0x000ffbde, 0x0652a139, + 0x001fcbf0, 0x000003df, 0x0463292e, + 0x002fb3ff, 0x3ff007e3, 0x0293a91d, + 0x002f9c12, 0x3ff00be7, 0x01241905, + 0x001f8c29, 0x000007ed, 0x3fe470eb, + 0x000f7c46, 0x000007f2, 0x3f04b8ca, + 0x3fef7865, 0x000007f6, 0x3e74e4a8 }, + }, + { 0x1c00, { + 0x001fd3e9, 0x001fd3e9, 0x08f23d26, + 0x002fbff3, 0x001fe3e4, 0x0712ad23, + 0x002fa800, 0x000ff3e0, 0x05631d1b, + 0x001f9810, 0x000ffbe1, 0x03b3890d, + 0x000f8c23, 0x000003e3, 0x0233e8fa, + 0x3fef843b, 0x000003e7, 0x00f430e4, + 0x3fbf8456, 0x3ff00bea, 0x00046cc8, + 0x3f8f8c72, 0x3ff00bef, 0x3f3490ac }, + }, + { 0x1e00, { + 0x001fbbf4, 0x001fbbf4, 0x09425112, + 0x001fa800, 0x002fc7ed, 0x0792b110, + 0x000f980e, 0x001fdbe6, 0x0613110a, + 0x3fff8c20, 0x001fe7e3, 0x04a368fd, + 0x3fcf8c33, 0x000ff7e2, 0x0343b8ed, + 0x3f9f8c4a, 0x000fffe3, 0x0203f8da, + 0x3f5f9c61, 0x000003e6, 0x00e428c5, + 0x3f1fb07b, 0x000003eb, 0x3fe440af }, + }, + { 0x2000, { + 0x000fa400, 0x000fa400, 0x09625902, + 0x3fff980c, 0x001fb7f5, 0x0812b0ff, + 0x3fdf901c, 0x001fc7ed, 0x06b2fcfa, + 0x3faf902d, 0x001fd3e8, 0x055348f1, + 0x3f7f983f, 0x001fe3e5, 0x04038ce3, + 0x3f3fa454, 0x001fefe3, 0x02e3c8d1, + 0x3f0fb86a, 0x001ff7e4, 0x01c3e8c0, + 0x3ecfd880, 0x000fffe6, 0x00c404ac }, + }, + { 0x2200, { + 0x3fdf9c0b, 0x3fdf9c0b, 0x09725cf4, + 0x3fbf9818, 0x3fffa400, 0x0842a8f1, + 0x3f8f9827, 0x000fb3f7, 0x0702f0ec, + 0x3f5fa037, 0x000fc3ef, 0x05d330e4, + 0x3f2fac49, 0x001fcfea, 0x04a364d9, + 0x3effc05c, 0x001fdbe7, 0x038394ca, + 0x3ecfdc6f, 0x001fe7e6, 0x0273b0bb, + 0x3ea00083, 0x001fefe6, 0x0183c0a9 }, + }, + { 0x2400, { + 0x3f9fa014, 0x3f9fa014, 0x098260e6, + 0x3f7f9c23, 0x3fcf9c0a, 0x08629ce5, + 0x3f4fa431, 0x3fefa400, 0x0742d8e1, + 0x3f1fb440, 0x3fffb3f8, 0x062310d9, + 0x3eefc850, 0x000fbbf2, 0x050340d0, + 0x3ecfe062, 0x000fcbec, 0x041364c2, + 0x3ea00073, 0x001fd3ea, 0x03037cb5, + 0x3e902086, 0x001fdfe8, 0x022388a5 }, + }, + { 0x2600, { + 0x3f5fa81e, 0x3f5fa81e, 0x096258da, + 0x3f3fac2b, 0x3f8fa412, 0x088290d8, + 0x3f0fbc38, 0x3fafa408, 0x0772c8d5, + 0x3eefcc47, 0x3fcfa800, 0x0672f4ce, + 0x3ecfe456, 0x3fefaffa, 0x05531cc6, + 0x3eb00066, 0x3fffbbf3, 0x047334bb, + 0x3ea01c77, 0x000fc7ee, 0x039348ae, + 0x3ea04486, 0x000fd3eb, 0x02b350a1 }, + }, + { 0x2800, { + 0x3f2fb426, 0x3f2fb426, 0x094250ce, + 0x3f0fc032, 0x3f4fac1b, 0x086284cd, + 0x3eefd040, 0x3f7fa811, 0x0782acc9, + 0x3ecfe84c, 0x3f9fa807, 0x06a2d8c4, + 0x3eb0005b, 0x3fbfac00, 0x05b2f4bc, + 0x3eb0186a, 0x3fdfb3fa, 0x04c308b4, + 0x3eb04077, 0x3fefbbf4, 0x03f31ca8, + 0x3ec06884, 0x000fbff2, 0x03031c9e }, + }, + { 0x2a00, { + 0x3f0fc42d, 0x3f0fc42d, 0x090240c4, + 0x3eefd439, 0x3f2fb822, 0x08526cc2, + 0x3edfe845, 0x3f4fb018, 0x078294bf, + 0x3ec00051, 0x3f6fac0f, 0x06b2b4bb, + 0x3ec0185f, 0x3f8fac07, 0x05e2ccb4, + 0x3ec0386b, 0x3fafac00, 0x0502e8ac, + 0x3ed05c77, 0x3fcfb3fb, 0x0432f0a3, + 0x3ef08482, 0x3fdfbbf6, 0x0372f898 }, + }, + { 0x2c00, { + 0x3eefdc31, 0x3eefdc31, 0x08e238b8, + 0x3edfec3d, 0x3f0fc828, 0x082258b9, + 0x3ed00049, 0x3f1fc01e, 0x077278b6, + 0x3ed01455, 0x3f3fb815, 0x06c294b2, + 0x3ed03460, 0x3f5fb40d, 0x0602acac, + 0x3ef0506c, 0x3f7fb006, 0x0542c0a4, + 0x3f107476, 0x3f9fb400, 0x0472c89d, + 0x3f309c80, 0x3fbfb7fc, 0x03b2cc94 }, + }, + { 0x2e00, { + 0x3eefec37, 0x3eefec37, 0x088220b0, + 0x3ee00041, 0x3effdc2d, 0x07f244ae, + 0x3ee0144c, 0x3f0fd023, 0x07625cad, + 0x3ef02c57, 0x3f1fc81a, 0x06c274a9, + 0x3f004861, 0x3f3fbc13, 0x060288a6, + 0x3f20686b, 0x3f5fb80c, 0x05529c9e, + 0x3f408c74, 0x3f6fb805, 0x04b2ac96, + 0x3f80ac7e, 0x3f8fb800, 0x0402ac8e }, + }, + { 0x3000, { + 0x3ef0003a, 0x3ef0003a, 0x084210a6, + 0x3ef01045, 0x3effec32, 0x07b228a7, + 0x3f00284e, 0x3f0fdc29, 0x073244a4, + 0x3f104058, 0x3f0fd420, 0x06a258a2, + 0x3f305c62, 0x3f2fc818, 0x0612689d, + 0x3f508069, 0x3f3fc011, 0x05728496, + 0x3f80a072, 0x3f4fc00a, 0x04d28c90, + 0x3fc0c07b, 0x3f6fbc04, 0x04429088 }, + }, + { 0x3200, { + 0x3f00103e, 0x3f00103e, 0x07f1fc9e, + 0x3f102447, 0x3f000035, 0x0782149d, + 0x3f203c4f, 0x3f0ff02c, 0x07122c9c, + 0x3f405458, 0x3f0fe424, 0x06924099, + 0x3f607061, 0x3f1fd41d, 0x06024c97, + 0x3f909068, 0x3f2fcc16, 0x05726490, + 0x3fc0b070, 0x3f3fc80f, 0x04f26c8a, + 0x0000d077, 0x3f4fc409, 0x04627484 }, + }, + { 0x3400, { + 0x3f202040, 0x3f202040, 0x07a1e898, + 0x3f303449, 0x3f100c38, 0x0741fc98, + 0x3f504c50, 0x3f10002f, 0x06e21495, + 0x3f706459, 0x3f1ff028, 0x06722492, + 0x3fa08060, 0x3f1fe421, 0x05f2348f, + 0x3fd09c67, 0x3f1fdc19, 0x05824c89, + 0x0000bc6e, 0x3f2fd014, 0x04f25086, + 0x0040dc74, 0x3f3fcc0d, 0x04825c7f }, + }, + { 0x3600, { + 0x3f403042, 0x3f403042, 0x0761d890, + 0x3f504848, 0x3f301c3b, 0x0701f090, + 0x3f805c50, 0x3f200c33, 0x06a2008f, + 0x3fa07458, 0x3f10002b, 0x06520c8d, + 0x3fd0905e, 0x3f1ff424, 0x05e22089, + 0x0000ac65, 0x3f1fe81d, 0x05823483, + 0x0030cc6a, 0x3f2fdc18, 0x04f23c81, + 0x0080e871, 0x3f2fd412, 0x0482407c }, + }, + { 0x3800, { + 0x3f604043, 0x3f604043, 0x0721c88a, + 0x3f80544a, 0x3f502c3c, 0x06d1d88a, + 0x3fb06851, 0x3f301c35, 0x0681e889, + 0x3fd08456, 0x3f30082f, 0x0611fc88, + 0x00009c5d, 0x3f200027, 0x05d20884, + 0x0030b863, 0x3f2ff421, 0x05621880, + 0x0070d468, 0x3f2fe81b, 0x0502247c, + 0x00c0ec6f, 0x3f2fe015, 0x04a22877 }, + }, + { 0x3a00, { + 0x3f904c44, 0x3f904c44, 0x06e1b884, + 0x3fb0604a, 0x3f70383e, 0x0691c885, + 0x3fe07451, 0x3f502c36, 0x0661d483, + 0x00009055, 0x3f401831, 0x0601ec81, + 0x0030a85b, 0x3f300c2a, 0x05b1f480, + 0x0070c061, 0x3f300024, 0x0562047a, + 0x00b0d867, 0x3f3ff41e, 0x05020c77, + 0x00f0f46b, 0x3f2fec19, 0x04a21474 }, + }, + { 0x3c00, { + 0x3fb05c43, 0x3fb05c43, 0x06c1b07e, + 0x3fe06c4b, 0x3f902c3f, 0x0681c081, + 0x0000844f, 0x3f703838, 0x0631cc7d, + 0x00309855, 0x3f602433, 0x05d1d47e, + 0x0060b459, 0x3f50142e, 0x0581e47b, + 0x00a0c85f, 0x3f400828, 0x0531f078, + 0x00e0e064, 0x3f300021, 0x0501fc73, + 0x00b0fc6a, 0x3f3ff41d, 0x04a20873 }, + }, + { 0x3e00, { + 0x3fe06444, 0x3fe06444, 0x0681a07a, + 0x00007849, 0x3fc0503f, 0x0641b07a, + 0x0020904d, 0x3fa0403a, 0x05f1c07a, + 0x0060a453, 0x3f803034, 0x05c1c878, + 0x0090b858, 0x3f70202f, 0x0571d477, + 0x00d0d05d, 0x3f501829, 0x0531e073, + 0x0110e462, 0x3f500825, 0x04e1e471, + 0x01510065, 0x3f40001f, 0x04a1f06d }, + }, + { 0x4000, { + 0x00007044, 0x00007044, 0x06519476, + 0x00208448, 0x3fe05c3f, 0x0621a476, + 0x0050984d, 0x3fc04c3a, 0x05e1b075, + 0x0080ac52, 0x3fa03c35, 0x05a1b875, + 0x00c0c056, 0x3f803030, 0x0561c473, + 0x0100d45b, 0x3f70202b, 0x0521d46f, + 0x0140e860, 0x3f601427, 0x04d1d46e, + 0x01810064, 0x3f500822, 0x0491dc6b }, + }, + { 0x5000, { + 0x0110a442, 0x0110a442, 0x0551545e, + 0x0140b045, 0x00e0983f, 0x0531585f, + 0x0160c047, 0x00c08c3c, 0x0511645e, + 0x0190cc4a, 0x00908039, 0x04f1685f, + 0x01c0dc4c, 0x00707436, 0x04d1705e, + 0x0200e850, 0x00506833, 0x04b1785b, + 0x0230f453, 0x00305c30, 0x0491805a, + 0x02710056, 0x0010542d, 0x04718059 }, + }, + { 0x6000, { + 0x01c0bc40, 0x01c0bc40, 0x04c13052, + 0x01e0c841, 0x01a0b43d, 0x04c13851, + 0x0210cc44, 0x0180a83c, 0x04a13453, + 0x0230d845, 0x0160a03a, 0x04913c52, + 0x0260e047, 0x01409838, 0x04714052, + 0x0280ec49, 0x01208c37, 0x04514c50, + 0x02b0f44b, 0x01008435, 0x04414c50, + 0x02d1004c, 0x00e07c33, 0x0431544f }, + }, + { 0x7000, { + 0x0230c83e, 0x0230c83e, 0x04711c4c, + 0x0250d03f, 0x0210c43c, 0x0471204b, + 0x0270d840, 0x0200b83c, 0x0451244b, + 0x0290dc42, 0x01e0b43a, 0x0441244c, + 0x02b0e443, 0x01c0b038, 0x0441284b, + 0x02d0ec44, 0x01b0a438, 0x0421304a, + 0x02f0f445, 0x0190a036, 0x04213449, + 0x0310f847, 0x01709c34, 0x04213848 }, + }, + { 0x8000, { + 0x0280d03d, 0x0280d03d, 0x04310c48, + 0x02a0d43e, 0x0270c83c, 0x04311047, + 0x02b0dc3e, 0x0250c83a, 0x04311447, + 0x02d0e040, 0x0240c03a, 0x04211446, + 0x02e0e840, 0x0220bc39, 0x04111847, + 0x0300e842, 0x0210b438, 0x04012445, + 0x0310f043, 0x0200b037, 0x04012045, + 0x0330f444, 0x01e0ac36, 0x03f12445 }, + }, + { 0xefff, { + 0x0340dc3a, 0x0340dc3a, 0x03b0ec40, + 0x0340e03a, 0x0330e039, 0x03c0f03e, + 0x0350e03b, 0x0330dc39, 0x03c0ec3e, + 0x0350e43a, 0x0320dc38, 0x03c0f43e, + 0x0360e43b, 0x0320d839, 0x03b0f03e, + 0x0360e83b, 0x0310d838, 0x03c0fc3b, + 0x0370e83b, 0x0310d439, 0x03a0f83d, + 0x0370e83c, 0x0300d438, 0x03b0fc3c }, + } +}; + enum rcar_vin_state { STOPPED = 0, RUNNING, @@ -161,6 +503,9 @@ struct rcar_vin_cam { /* Client output, as seen by the VIN */ unsigned int width; unsigned int height; + /* User window from S_FMT */ + unsigned int out_width; + unsigned int out_height; /* * User window from S_CROP / G_CROP, produced by client cropping and * scaling, VIN scaling and VIN cropping, mapped back onto the client @@ -667,6 +1012,60 @@ static void rcar_vin_clock_stop(struct soc_camera_host *ici) /* VIN does not have "mclk" */ } +static void set_coeff(struct rcar_vin_priv *priv, unsigned short xs) +{ + int i; + const struct vin_coeff *p_prev_set = NULL; + const struct vin_coeff *p_set = NULL; + + /* Look for suitable coefficient values */ + for (i = 0; i < ARRAY_SIZE(vin_coeff_set); i++) { + p_prev_set = p_set; + p_set = &vin_coeff_set[i]; + + if (xs < p_set->xs_value) + break; + } + + /* Use previous value if its XS value is closer */ + if (p_prev_set && p_set && + xs - p_prev_set->xs_value < p_set->xs_value - xs) + p_set = p_prev_set; + + /* Set coefficient registers */ + iowrite32(p_set->coeff_set[0], priv->base + VNC1A_REG); + iowrite32(p_set->coeff_set[1], priv->base + VNC1B_REG); + iowrite32(p_set->coeff_set[2], priv->base + VNC1C_REG); + + iowrite32(p_set->coeff_set[3], priv->base + VNC2A_REG); + iowrite32(p_set->coeff_set[4], priv->base + VNC2B_REG); + iowrite32(p_set->coeff_set[5], priv->base + VNC2C_REG); + + iowrite32(p_set->coeff_set[6], priv->base + VNC3A_REG); + iowrite32(p_set->coeff_set[7], priv->base + VNC3B_REG); + iowrite32(p_set->coeff_set[8], priv->base + VNC3C_REG); + + iowrite32(p_set->coeff_set[9], priv->base + VNC4A_REG); + iowrite32(p_set->coeff_set[10], priv->base + VNC4B_REG); + iowrite32(p_set->coeff_set[11], priv->base + VNC4C_REG); + + iowrite32(p_set->coeff_set[12], priv->base + VNC5A_REG); + iowrite32(p_set->coeff_set[13], priv->base + VNC5B_REG); + iowrite32(p_set->coeff_set[14], priv->base + VNC5C_REG); + + iowrite32(p_set->coeff_set[15], priv->base + VNC6A_REG); + iowrite32(p_set->coeff_set[16], priv->base + VNC6B_REG); + iowrite32(p_set->coeff_set[17], priv->base + VNC6C_REG); + + iowrite32(p_set->coeff_set[18], priv->base + VNC7A_REG); + iowrite32(p_set->coeff_set[19], priv->base + VNC7B_REG); + iowrite32(p_set->coeff_set[20], priv->base + VNC7C_REG); + + iowrite32(p_set->coeff_set[21], priv->base + VNC8A_REG); + iowrite32(p_set->coeff_set[22], priv->base + VNC8B_REG); + iowrite32(p_set->coeff_set[23], priv->base + VNC8C_REG); +} + /* rect is guaranteed to not exceed the scaled camera rectangle */ static int rcar_vin_set_rect(struct soc_camera_device *icd) { @@ -676,6 +1075,7 @@ static int rcar_vin_set_rect(struct soc_camera_device *icd) unsigned int left_offset, top_offset; unsigned char dsize = 0; struct v4l2_rect *cam_subrect = &cam->subrect; + u32 value; dev_dbg(icd->parent, "Crop %ux%u@%u:%u\n", icd->user_width, icd->user_height, cam->vin_left, cam->vin_top); @@ -695,40 +1095,64 @@ static int rcar_vin_set_rect(struct soc_camera_device *icd) /* Set Start/End Pixel/Line Pre-Clip */ iowrite32(left_offset << dsize, priv->base + VNSPPRC_REG); - iowrite32((left_offset + cam->width - 1) << dsize, + iowrite32((left_offset + cam_subrect->width - 1) << dsize, priv->base + VNEPPRC_REG); switch (priv->field) { case V4L2_FIELD_INTERLACED: case V4L2_FIELD_INTERLACED_TB: case V4L2_FIELD_INTERLACED_BT: iowrite32(top_offset / 2, priv->base + VNSLPRC_REG); - iowrite32((top_offset + cam->height) / 2 - 1, + iowrite32((top_offset + cam_subrect->height) / 2 - 1, priv->base + VNELPRC_REG); break; default: iowrite32(top_offset, priv->base + VNSLPRC_REG); - iowrite32(top_offset + cam->height - 1, + iowrite32(top_offset + cam_subrect->height - 1, priv->base + VNELPRC_REG); break; } + /* Set scaling coefficient */ + value = 0; + if (cam_subrect->height != cam->out_height) + value = (4096 * cam_subrect->height) / cam->out_height; + dev_dbg(icd->parent, "YS Value: %x\n", value); + iowrite32(value, priv->base + VNYS_REG); + + value = 0; + if (cam_subrect->width != cam->out_width) + value = (4096 * cam_subrect->width) / cam->out_width; + + /* Horizontal upscaling is up to double size */ + if (0 < value && value < 2048) + value = 2048; + + dev_dbg(icd->parent, "XS Value: %x\n", value); + iowrite32(value, priv->base + VNXS_REG); + + /* Horizontal upscaling is carried out by scaling down from double size */ + if (value < 4096) + value *= 2; + + set_coeff(priv, value); + /* Set Start/End Pixel/Line Post-Clip */ iowrite32(0, priv->base + VNSPPOC_REG); iowrite32(0, priv->base + VNSLPOC_REG); - iowrite32((cam_subrect->width - 1) << dsize, priv->base + VNEPPOC_REG); + iowrite32((cam->out_width - 1) << dsize, priv->base + VNEPPOC_REG); switch (priv->field) { case V4L2_FIELD_INTERLACED: case V4L2_FIELD_INTERLACED_TB: case V4L2_FIELD_INTERLACED_BT: - iowrite32(cam_subrect->height / 2 - 1, + iowrite32(cam->out_height / 2 - 1, priv->base + VNELPOC_REG); break; default: - iowrite32(cam_subrect->height - 1, priv->base + VNELPOC_REG); + iowrite32(cam->out_height - 1, priv->base + VNELPOC_REG); break; } - iowrite32(ALIGN(cam->width, 0x10), priv->base + VNIS_REG); + iowrite32(ALIGN(cam->out_width, 0x10), priv->base + VNIS_REG); return 0; } @@ -1007,6 +1431,8 @@ static int rcar_vin_get_formats(struct soc_camera_device *icd, unsigned int idx, cam->subrect = rect; cam->width = mf.width; cam->height = mf.height; + cam->out_width = mf.width; + cam->out_height = mf.height; icd->host_priv = cam; } else { @@ -1267,6 +1693,9 @@ static int rcar_vin_set_fmt(struct soc_camera_device *icd, dev_dbg(dev, "W: %u : %u, H: %u : %u\n", vin_sub_width, pix->width, vin_sub_height, pix->height); + cam->out_width = pix->width; + cam->out_height = pix->height; + icd->current_fmt = xlate; priv->field = field; @@ -1318,8 +1747,12 @@ static int rcar_vin_try_fmt(struct soc_camera_device *icd, if (ret < 0) return ret; - pix->width = mf.width; - pix->height = mf.height; + /* Adjust only if VIN cannot scale */ + if (pix->width > mf.width * 2) + pix->width = mf.width * 2; + if (pix->height > mf.height * 3) + pix->height = mf.height * 3; + pix->field = mf.field; pix->colorspace = mf.colorspace; From 609f33c928026a2b3833bc3db23e4fabafa3306e Mon Sep 17 00:00:00 2001 From: Koji Matsuoka Date: Wed, 22 Oct 2014 01:05:36 -0300 Subject: [PATCH 04/17] [media] rcar_vin: Enable VSYNC field toggle mode By applying this patch, it sets to VSYNC field toggle mode not only at the time of progressive mode but at the time of an interlace mode. Signed-off-by: Koji Matsuoka Signed-off-by: Yoshihiro Kaneko Signed-off-by: Guennadi Liakhovetski Signed-off-by: Mauro Carvalho Chehab --- drivers/media/platform/soc_camera/rcar_vin.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/soc_camera/rcar_vin.c b/drivers/media/platform/soc_camera/rcar_vin.c index c71ef2b526a0..1b1d5bc16afe 100644 --- a/drivers/media/platform/soc_camera/rcar_vin.c +++ b/drivers/media/platform/soc_camera/rcar_vin.c @@ -130,6 +130,7 @@ #define VNDMR2_VPS (1 << 30) #define VNDMR2_HPS (1 << 29) #define VNDMR2_FTEV (1 << 17) +#define VNDMR2_VLV(n) ((n & 0xf) << 12) #define VIN_MAX_WIDTH 2048 #define VIN_MAX_HEIGHT 2048 @@ -1243,7 +1244,7 @@ static int rcar_vin_set_bus_param(struct soc_camera_device *icd) if (ret < 0 && ret != -ENOIOCTLCMD) return ret; - val = priv->field == V4L2_FIELD_NONE ? VNDMR2_FTEV : 0; + val = VNDMR2_FTEV | VNDMR2_VLV(1); if (!(common_flags & V4L2_MBUS_VSYNC_ACTIVE_LOW)) val |= VNDMR2_VPS; if (!(common_flags & V4L2_MBUS_HSYNC_ACTIVE_LOW)) From e272d95f8c0544cff55c485a10828b063c8e417c Mon Sep 17 00:00:00 2001 From: Koji Matsuoka Date: Fri, 31 Oct 2014 06:09:25 -0300 Subject: [PATCH 05/17] [media] rcar_vin: Fix interrupt enable in progressive The progressive input is captured by the field interrupt. Therefore the end of frame interrupt is unnecessary. Signed-off-by: Koji Matsuoka Signed-off-by: Yoshihiro Kaneko Signed-off-by: Guennadi Liakhovetski Signed-off-by: Mauro Carvalho Chehab --- drivers/media/platform/soc_camera/rcar_vin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/media/platform/soc_camera/rcar_vin.c b/drivers/media/platform/soc_camera/rcar_vin.c index 1b1d5bc16afe..44461c5552aa 100644 --- a/drivers/media/platform/soc_camera/rcar_vin.c +++ b/drivers/media/platform/soc_camera/rcar_vin.c @@ -678,7 +678,7 @@ static int rcar_vin_setup(struct rcar_vin_priv *priv) vnmc |= VNMC_BPS; /* progressive or interlaced mode */ - interrupts = progressive ? VNIE_FIE | VNIE_EFE : VNIE_EFE; + interrupts = progressive ? VNIE_FIE : VNIE_EFE; /* ack interrupts */ iowrite32(interrupts, priv->base + VNINTS_REG); From f2d27e4519e5373767815d2050293c628242e34f Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Fri, 5 Dec 2014 10:02:47 -0300 Subject: [PATCH 06/17] [media] v4l2-mediabus.h: use two __u16 instead of two __u32 The ycbcr_enc and quantization fields do not need a __u32. Switch to two __u16 types, thus preserving alignment and avoiding holes in the struct. This makes one more __u32 available for future expansion. Suggested by Sakari Ailus. Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- include/uapi/linux/v4l2-mediabus.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/uapi/linux/v4l2-mediabus.h b/include/uapi/linux/v4l2-mediabus.h index 5a86d8ede09c..26db20647e6f 100644 --- a/include/uapi/linux/v4l2-mediabus.h +++ b/include/uapi/linux/v4l2-mediabus.h @@ -31,9 +31,9 @@ struct v4l2_mbus_framefmt { __u32 code; __u32 field; __u32 colorspace; - __u32 ycbcr_enc; - __u32 quantization; - __u32 reserved[5]; + __u16 ycbcr_enc; + __u16 quantization; + __u32 reserved[6]; }; #ifndef __KERNEL__ From cc0363120b1f0c939bb7c61d5b7d2b616ad27783 Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Fri, 5 Dec 2014 10:04:47 -0300 Subject: [PATCH 07/17] [media] DocBook media: add missing ycbcr_enc and quantization fields I forgot to add these fields to the relevant structs. Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- Documentation/DocBook/media/v4l/pixfmt.xml | 36 +++++++++++++++++-- .../DocBook/media/v4l/subdev-formats.xml | 18 +++++++++- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/Documentation/DocBook/media/v4l/pixfmt.xml b/Documentation/DocBook/media/v4l/pixfmt.xml index ccf6053c1ae4..d5eca4b8f74b 100644 --- a/Documentation/DocBook/media/v4l/pixfmt.xml +++ b/Documentation/DocBook/media/v4l/pixfmt.xml @@ -138,9 +138,25 @@ applicable values. __u32 flags - Flags set by the application or driver, see Flags set by the application or driver, see . + + &v4l2-ycbcr-encoding; + ycbcr_enc + This information supplements the +colorspace and must be set by the driver for +capture streams and by the application for output streams, +see . + + + &v4l2-quantization; + quantization + This information supplements the +colorspace and must be set by the driver for +capture streams and by the application for output streams, +see . + @@ -231,10 +247,26 @@ codes can be used. flags Flags set by the application or driver, see . + + + &v4l2-ycbcr-encoding; + ycbcr_enc + This information supplements the +colorspace and must be set by the driver for +capture streams and by the application for output streams, +see . + + + &v4l2-quantization; + quantization + This information supplements the +colorspace and must be set by the driver for +capture streams and by the application for output streams, +see . __u8 - reserved[10] + reserved[8] Reserved for future extensions. Should be zeroed by the application. diff --git a/Documentation/DocBook/media/v4l/subdev-formats.xml b/Documentation/DocBook/media/v4l/subdev-formats.xml index 18730b96e1e6..c5ea868e3909 100644 --- a/Documentation/DocBook/media/v4l/subdev-formats.xml +++ b/Documentation/DocBook/media/v4l/subdev-formats.xml @@ -33,9 +33,25 @@ Image colorspace, from &v4l2-colorspace;. See for details. + + &v4l2-ycbcr-encoding; + ycbcr_enc + This information supplements the +colorspace and must be set by the driver for +capture streams and by the application for output streams, +see . + + + &v4l2-quantization; + quantization + This information supplements the +colorspace and must be set by the driver for +capture streams and by the application for output streams, +see . + __u32 - reserved[7] + reserved[6] Reserved for future extensions. Applications and drivers must set the array to zero. From 38913a5cc58c26b96182799442f96e992301816c Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Fri, 5 Dec 2014 10:18:38 -0300 Subject: [PATCH 08/17] [media] vivid.txt: document new controls Document the new 'Y'CbCr Encoding' and 'Quantization' controls. Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- Documentation/video4linux/vivid.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Documentation/video4linux/vivid.txt b/Documentation/video4linux/vivid.txt index e5a940e3d304..6cfc8541a362 100644 --- a/Documentation/video4linux/vivid.txt +++ b/Documentation/video4linux/vivid.txt @@ -640,6 +640,21 @@ Colorspace: selects which colorspace should be used when generating the image. Changing the colorspace will result in the V4L2_EVENT_SOURCE_CHANGE to be sent since it emulates a detected colorspace change. +Y'CbCr Encoding: selects which Y'CbCr encoding should be used when generating + a Y'CbCr image. This only applies if the CSC Colorbar test pattern is + selected, and if the format is set to a Y'CbCr format as opposed to an + RGB format. + + Changing the Y'CbCr encoding will result in the V4L2_EVENT_SOURCE_CHANGE + to be sent since it emulates a detected colorspace change. + +Quantization: selects which quantization should be used for the RGB or Y'CbCr + encoding when generating the test pattern. This only applies if the CSC + Colorbar test pattern is selected. + + Changing the quantization will result in the V4L2_EVENT_SOURCE_CHANGE + to be sent since it emulates a detected colorspace change. + Limited RGB Range (16-235): selects if the RGB range of the HDMI source should be limited or full range. This combines with the Digital Video 'Rx RGB Quantization Range' control and can be used to test what happens if From 5fdb9679b94ed74f5e9376bc289d840bd4f73f16 Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Fri, 5 Dec 2014 11:23:55 -0300 Subject: [PATCH 09/17] [media] DocBook media: update version number and document changes Update the version to 3.19. Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- Documentation/DocBook/media/v4l/compat.xml | 12 ++++++++++++ Documentation/DocBook/media/v4l/v4l2.xml | 11 ++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml index 0a2debfa68f6..350dfb3d71ea 100644 --- a/Documentation/DocBook/media/v4l/compat.xml +++ b/Documentation/DocBook/media/v4l/compat.xml @@ -2579,6 +2579,18 @@ fields changed from _s32 to _u32. +
+ V4L2 in Linux 3.19 + + + Rewrote Colorspace chapter, added new &v4l2-ycbcr-encoding; +and &v4l2-quantization; fields to &v4l2-pix-format;, &v4l2-pix-format-mplane; +and &v4l2-mbus-framefmt;. + + + +
+
Relation of V4L2 to other Linux multimedia APIs diff --git a/Documentation/DocBook/media/v4l/v4l2.xml b/Documentation/DocBook/media/v4l/v4l2.xml index 7cfe618f754d..ac0f8d9d2a49 100644 --- a/Documentation/DocBook/media/v4l/v4l2.xml +++ b/Documentation/DocBook/media/v4l/v4l2.xml @@ -151,6 +151,15 @@ structs, ioctls) must be noted in more detail in the history chapter (compat.xml), along with the possible impact on existing drivers and applications. --> + + 3.19 + 2014-12-05 + hv + Rewrote Colorspace chapter, added new &v4l2-ycbcr-encoding; and &v4l2-quantization; fields +to &v4l2-pix-format;, &v4l2-pix-format-mplane; and &v4l2-mbus-framefmt;. + + + 3.17 2014-08-04 @@ -539,7 +548,7 @@ and discussions on the V4L mailing list. Video for Linux Two API Specification - Revision 3.17 + Revision 3.19 &sub-common; From bb9ff078860f9d2f79d3a6bea3af9f48354ddb75 Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Sat, 6 Dec 2014 07:30:03 -0300 Subject: [PATCH 10/17] [media] vivid: fix CROP_BOUNDS typo for video output An error was returned if composing was not supported, instead of if cropping was not supported. A classic copy-and-paste bug. Found with v4l2-compliance. Signed-off-by: Hans Verkuil Cc: # for v3.18 Signed-off-by: Mauro Carvalho Chehab --- drivers/media/platform/vivid/vivid-vid-out.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/media/platform/vivid/vivid-vid-out.c b/drivers/media/platform/vivid/vivid-vid-out.c index ee5c3992b276..39ff79f6aa67 100644 --- a/drivers/media/platform/vivid/vivid-vid-out.c +++ b/drivers/media/platform/vivid/vivid-vid-out.c @@ -625,7 +625,7 @@ int vivid_vid_out_g_selection(struct file *file, void *priv, sel->r = dev->fmt_out_rect; break; case V4L2_SEL_TGT_CROP_BOUNDS: - if (!dev->has_compose_out) + if (!dev->has_crop_out) return -EINVAL; sel->r = vivid_max_rect; break; From 454a4e728dd56c8515b80381c14168099279e7fc Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Sun, 7 Dec 2014 11:59:42 -0300 Subject: [PATCH 11/17] [media] v4l2-ioctl: WARN_ON if querycap didn't fill device_caps This is easy to forget to do in drivers. While v4l2-compliance will check for it, not everyone remembers to run it. So warn about it. Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- drivers/media/v4l2-core/v4l2-ioctl.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c index 75658717961f..faac2f4e0f3a 100644 --- a/drivers/media/v4l2-core/v4l2-ioctl.c +++ b/drivers/media/v4l2-core/v4l2-ioctl.c @@ -1017,6 +1017,12 @@ static int v4l_querycap(const struct v4l2_ioctl_ops *ops, ret = ops->vidioc_querycap(file, fh, cap); cap->capabilities |= V4L2_CAP_EXT_PIX_FORMAT; + /* + * Drivers MUST fill in device_caps, so check for this and + * warn if it was forgotten. + */ + WARN_ON(!(cap->capabilities & V4L2_CAP_DEVICE_CAPS) || + !cap->device_caps); cap->device_caps |= V4L2_CAP_EXT_PIX_FORMAT; return ret; From 165d00439fa9e9da7f263dc844cbd524cf624074 Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Mon, 8 Dec 2014 13:23:49 -0300 Subject: [PATCH 12/17] [media] cx88: add missing alloc_ctx support The cx88 vb2 conversion and the vb2 dma_sg improvements were developed separately and were merged separately. Unfortunately, the patch updating drivers to the dma_sg improvements didn't take the updated cx88 driver into account. Basically two ships passing in the night, unaware of one another even though both ships have the same owner, i.e. me :-) Signed-off-by: Hans Verkuil Reported-by: Chris Lee Signed-off-by: Mauro Carvalho Chehab --- drivers/media/pci/cx88/cx88-blackbird.c | 4 +--- drivers/media/pci/cx88/cx88-dvb.c | 4 +--- drivers/media/pci/cx88/cx88-mpeg.c | 11 +++++++---- drivers/media/pci/cx88/cx88-vbi.c | 9 +-------- drivers/media/pci/cx88/cx88-video.c | 17 +++++++++-------- drivers/media/pci/cx88/cx88.h | 2 ++ 6 files changed, 21 insertions(+), 26 deletions(-) diff --git a/drivers/media/pci/cx88/cx88-blackbird.c b/drivers/media/pci/cx88/cx88-blackbird.c index 4160ca4e5413..d3c79d964f2c 100644 --- a/drivers/media/pci/cx88/cx88-blackbird.c +++ b/drivers/media/pci/cx88/cx88-blackbird.c @@ -647,6 +647,7 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt, dev->ts_packet_size = 188 * 4; dev->ts_packet_count = 32; sizes[0] = dev->ts_packet_size * dev->ts_packet_count; + alloc_ctxs[0] = dev->alloc_ctx; return 0; } @@ -662,14 +663,11 @@ static void buffer_finish(struct vb2_buffer *vb) { struct cx8802_dev *dev = vb->vb2_queue->drv_priv; struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb); - struct sg_table *sgt = vb2_dma_sg_plane_desc(vb, 0); struct cx88_riscmem *risc = &buf->risc; if (risc->cpu) pci_free_consistent(dev->pci, risc->size, risc->cpu, risc->dma); memset(risc, 0, sizeof(*risc)); - - dma_unmap_sg(&dev->pci->dev, sgt->sgl, sgt->nents, DMA_FROM_DEVICE); } static void buffer_queue(struct vb2_buffer *vb) diff --git a/drivers/media/pci/cx88/cx88-dvb.c b/drivers/media/pci/cx88/cx88-dvb.c index c344bfd0b896..5780e2f013b4 100644 --- a/drivers/media/pci/cx88/cx88-dvb.c +++ b/drivers/media/pci/cx88/cx88-dvb.c @@ -92,6 +92,7 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt, dev->ts_packet_size = 188 * 4; dev->ts_packet_count = dvb_buf_tscnt; sizes[0] = dev->ts_packet_size * dev->ts_packet_count; + alloc_ctxs[0] = dev->alloc_ctx; *num_buffers = dvb_buf_tscnt; return 0; } @@ -108,14 +109,11 @@ static void buffer_finish(struct vb2_buffer *vb) { struct cx8802_dev *dev = vb->vb2_queue->drv_priv; struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb); - struct sg_table *sgt = vb2_dma_sg_plane_desc(vb, 0); struct cx88_riscmem *risc = &buf->risc; if (risc->cpu) pci_free_consistent(dev->pci, risc->size, risc->cpu, risc->dma); memset(risc, 0, sizeof(*risc)); - - dma_unmap_sg(&dev->pci->dev, sgt->sgl, sgt->nents, DMA_FROM_DEVICE); } static void buffer_queue(struct vb2_buffer *vb) diff --git a/drivers/media/pci/cx88/cx88-mpeg.c b/drivers/media/pci/cx88/cx88-mpeg.c index f181a3a10389..1c1f69e6b0b9 100644 --- a/drivers/media/pci/cx88/cx88-mpeg.c +++ b/drivers/media/pci/cx88/cx88-mpeg.c @@ -235,10 +235,6 @@ int cx8802_buf_prepare(struct vb2_queue *q, struct cx8802_dev *dev, return -EINVAL; vb2_set_plane_payload(&buf->vb, 0, size); - rc = dma_map_sg(&dev->pci->dev, sgt->sgl, sgt->nents, DMA_FROM_DEVICE); - if (!rc) - return -EIO; - rc = cx88_risc_databuffer(dev->pci, risc, sgt->sgl, dev->ts_packet_size, dev->ts_packet_count, 0); if (rc) { @@ -733,6 +729,11 @@ static int cx8802_probe(struct pci_dev *pci_dev, if (NULL == dev) goto fail_core; dev->pci = pci_dev; + dev->alloc_ctx = vb2_dma_sg_init_ctx(&pci_dev->dev); + if (IS_ERR(dev->alloc_ctx)) { + err = PTR_ERR(dev->alloc_ctx); + goto fail_core; + } dev->core = core; /* Maintain a reference so cx88-video can query the 8802 device. */ @@ -752,6 +753,7 @@ static int cx8802_probe(struct pci_dev *pci_dev, return 0; fail_free: + vb2_dma_sg_cleanup_ctx(dev->alloc_ctx); kfree(dev); fail_core: core->dvbdev = NULL; @@ -798,6 +800,7 @@ static void cx8802_remove(struct pci_dev *pci_dev) /* common */ cx8802_fini_common(dev); cx88_core_put(dev->core,dev->pci); + vb2_dma_sg_cleanup_ctx(dev->alloc_ctx); kfree(dev); } diff --git a/drivers/media/pci/cx88/cx88-vbi.c b/drivers/media/pci/cx88/cx88-vbi.c index 6ab6e27648f6..32eb7fdb875e 100644 --- a/drivers/media/pci/cx88/cx88-vbi.c +++ b/drivers/media/pci/cx88/cx88-vbi.c @@ -120,6 +120,7 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt, sizes[0] = VBI_LINE_NTSC_COUNT * VBI_LINE_LENGTH * 2; else sizes[0] = VBI_LINE_PAL_COUNT * VBI_LINE_LENGTH * 2; + alloc_ctxs[0] = dev->alloc_ctx; return 0; } @@ -131,7 +132,6 @@ static int buffer_prepare(struct vb2_buffer *vb) struct sg_table *sgt = vb2_dma_sg_plane_desc(vb, 0); unsigned int lines; unsigned int size; - int rc; if (dev->core->tvnorm & V4L2_STD_525_60) lines = VBI_LINE_NTSC_COUNT; @@ -142,10 +142,6 @@ static int buffer_prepare(struct vb2_buffer *vb) return -EINVAL; vb2_set_plane_payload(vb, 0, size); - rc = dma_map_sg(&dev->pci->dev, sgt->sgl, sgt->nents, DMA_FROM_DEVICE); - if (!rc) - return -EIO; - cx88_risc_buffer(dev->pci, &buf->risc, sgt->sgl, 0, VBI_LINE_LENGTH * lines, VBI_LINE_LENGTH, 0, @@ -157,14 +153,11 @@ static void buffer_finish(struct vb2_buffer *vb) { struct cx8800_dev *dev = vb->vb2_queue->drv_priv; struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb); - struct sg_table *sgt = vb2_dma_sg_plane_desc(vb, 0); struct cx88_riscmem *risc = &buf->risc; if (risc->cpu) pci_free_consistent(dev->pci, risc->size, risc->cpu, risc->dma); memset(risc, 0, sizeof(*risc)); - - dma_unmap_sg(&dev->pci->dev, sgt->sgl, sgt->nents, DMA_FROM_DEVICE); } static void buffer_queue(struct vb2_buffer *vb) diff --git a/drivers/media/pci/cx88/cx88-video.c b/drivers/media/pci/cx88/cx88-video.c index a64ae31ae142..25a4b7f3188a 100644 --- a/drivers/media/pci/cx88/cx88-video.c +++ b/drivers/media/pci/cx88/cx88-video.c @@ -440,6 +440,7 @@ static int queue_setup(struct vb2_queue *q, const struct v4l2_format *fmt, *num_planes = 1; sizes[0] = (dev->fmt->depth * core->width * core->height) >> 3; + alloc_ctxs[0] = dev->alloc_ctx; return 0; } @@ -449,7 +450,6 @@ static int buffer_prepare(struct vb2_buffer *vb) struct cx88_core *core = dev->core; struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb); struct sg_table *sgt = vb2_dma_sg_plane_desc(vb, 0); - int rc; buf->bpl = core->width * dev->fmt->depth >> 3; @@ -457,10 +457,6 @@ static int buffer_prepare(struct vb2_buffer *vb) return -EINVAL; vb2_set_plane_payload(vb, 0, core->height * buf->bpl); - rc = dma_map_sg(&dev->pci->dev, sgt->sgl, sgt->nents, DMA_FROM_DEVICE); - if (!rc) - return -EIO; - switch (core->field) { case V4L2_FIELD_TOP: cx88_risc_buffer(dev->pci, &buf->risc, @@ -505,14 +501,11 @@ static void buffer_finish(struct vb2_buffer *vb) { struct cx8800_dev *dev = vb->vb2_queue->drv_priv; struct cx88_buffer *buf = container_of(vb, struct cx88_buffer, vb); - struct sg_table *sgt = vb2_dma_sg_plane_desc(vb, 0); struct cx88_riscmem *risc = &buf->risc; if (risc->cpu) pci_free_consistent(dev->pci, risc->size, risc->cpu, risc->dma); memset(risc, 0, sizeof(*risc)); - - dma_unmap_sg(&dev->pci->dev, sgt->sgl, sgt->nents, DMA_FROM_DEVICE); } static void buffer_queue(struct vb2_buffer *vb) @@ -1345,6 +1338,12 @@ static int cx8800_initdev(struct pci_dev *pci_dev, err = -EIO; goto fail_core; } + dev->alloc_ctx = vb2_dma_sg_init_ctx(&pci_dev->dev); + if (IS_ERR(dev->alloc_ctx)) { + err = PTR_ERR(dev->alloc_ctx); + goto fail_core; + } + /* initialize driver struct */ spin_lock_init(&dev->slock); @@ -1549,6 +1548,7 @@ fail_unreg: free_irq(pci_dev->irq, dev); mutex_unlock(&core->lock); fail_core: + vb2_dma_sg_cleanup_ctx(dev->alloc_ctx); core->v4ldev = NULL; cx88_core_put(core,dev->pci); fail_free: @@ -1582,6 +1582,7 @@ static void cx8800_finidev(struct pci_dev *pci_dev) /* free memory */ cx88_core_put(core,dev->pci); + vb2_dma_sg_cleanup_ctx(dev->alloc_ctx); kfree(dev); } diff --git a/drivers/media/pci/cx88/cx88.h b/drivers/media/pci/cx88/cx88.h index 3b0ae754f165..7748ca9abb09 100644 --- a/drivers/media/pci/cx88/cx88.h +++ b/drivers/media/pci/cx88/cx88.h @@ -485,6 +485,7 @@ struct cx8800_dev { /* pci i/o */ struct pci_dev *pci; unsigned char pci_rev,pci_lat; + void *alloc_ctx; const struct cx8800_fmt *fmt; @@ -548,6 +549,7 @@ struct cx8802_dev { /* pci i/o */ struct pci_dev *pci; unsigned char pci_rev,pci_lat; + void *alloc_ctx; /* dma queues */ struct cx88_dmaqueue mpegq; From 389208e1173e097590856ed24a505551510f78d4 Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Mon, 8 Dec 2014 13:23:50 -0300 Subject: [PATCH 13/17] [media] cx88: remove leftover start_video_dma() call The start_streaming op is responsible for starting the video dma, so it shouldn't be called anymore from the buf_queue op. Unfortunately, this call to start_video_dma() was added to the start_streaming op, but was forgotten to be removed from the buf_queue op, which is where it used to be before the vb2 conversion. Calling this function twice causes very hard to find errors: sometimes it works, sometimes it doesn't. It took me a whole friggin' day to track this down, and in the end it was just luck that my eye suddenly triggered on that line. Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- drivers/media/pci/cx88/cx88-video.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/media/pci/cx88/cx88-video.c b/drivers/media/pci/cx88/cx88-video.c index 25a4b7f3188a..860c98fc72c7 100644 --- a/drivers/media/pci/cx88/cx88-video.c +++ b/drivers/media/pci/cx88/cx88-video.c @@ -523,7 +523,6 @@ static void buffer_queue(struct vb2_buffer *vb) if (list_empty(&q->active)) { list_add_tail(&buf->list, &q->active); - start_video_dma(dev, q, buf); buf->count = q->count++; dprintk(2,"[%p/%d] buffer_queue - first active\n", buf, buf->vb.v4l2_buf.index); From 77911fd267cd8b564f03f025eb128b115489bbe5 Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Wed, 10 Dec 2014 04:22:37 -0300 Subject: [PATCH 14/17] [media] MAINTAINERS: vivi -> vivid The vivi driver no longer exists and is replaced by the vivid driver. Update MAINTAINERS accordingly. Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- MAINTAINERS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 9c49eb680020..6dc7f505b13c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -10032,13 +10032,13 @@ L: netdev@vger.kernel.org S: Maintained F: drivers/net/ethernet/via/via-velocity.* -VIVI VIRTUAL VIDEO DRIVER +VIVID VIRTUAL VIDEO DRIVER M: Hans Verkuil L: linux-media@vger.kernel.org T: git git://linuxtv.org/media_tree.git W: http://linuxtv.org S: Maintained -F: drivers/media/platform/vivi* +F: drivers/media/platform/vivid/* VLAN (802.1Q) M: Patrick McHardy From c1d9e03d4ef47de60b414fa25f05f9c867f43c5a Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Tue, 2 Dec 2014 12:40:31 -0300 Subject: [PATCH 15/17] [media] vino/saa7191: move to staging in preparation for removal These drivers haven't been tested in a long, long time. The hardware is ancient and hopelessly obsolete. These drivers also need to be converted to newer media frameworks but due to the lack of hardware that's going to be impossible. So these drivers are a prime candidate for removal. If someone is interested in working on these drivers to prevent their removal, then please contact the linux-media mailinglist. Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- drivers/media/i2c/Kconfig | 9 ------- drivers/media/i2c/Makefile | 1 - drivers/media/platform/Kconfig | 8 ------- drivers/media/platform/Makefile | 3 --- drivers/staging/media/Kconfig | 2 ++ drivers/staging/media/Makefile | 1 + drivers/staging/media/vino/Kconfig | 24 +++++++++++++++++++ drivers/staging/media/vino/Makefile | 3 +++ .../platform => staging/media/vino}/indycam.c | 0 .../platform => staging/media/vino}/indycam.h | 0 .../i2c => staging/media/vino}/saa7191.c | 0 .../i2c => staging/media/vino}/saa7191.h | 0 .../platform => staging/media/vino}/vino.c | 0 .../platform => staging/media/vino}/vino.h | 0 14 files changed, 30 insertions(+), 21 deletions(-) create mode 100644 drivers/staging/media/vino/Kconfig create mode 100644 drivers/staging/media/vino/Makefile rename drivers/{media/platform => staging/media/vino}/indycam.c (100%) rename drivers/{media/platform => staging/media/vino}/indycam.h (100%) rename drivers/{media/i2c => staging/media/vino}/saa7191.c (100%) rename drivers/{media/i2c => staging/media/vino}/saa7191.h (100%) rename drivers/{media/platform => staging/media/vino}/vino.c (100%) rename drivers/{media/platform => staging/media/vino}/vino.h (100%) diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index f40b4cf6107a..205d71364343 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -284,15 +284,6 @@ config VIDEO_SAA711X To compile this driver as a module, choose M here: the module will be called saa7115. -config VIDEO_SAA7191 - tristate "Philips SAA7191 video decoder" - depends on VIDEO_V4L2 && I2C - ---help--- - Support for the Philips SAA7191 video decoder. - - To compile this driver as a module, choose M here: the - module will be called saa7191. - config VIDEO_TVP514X tristate "Texas Instruments TVP514x video decoder" depends on VIDEO_V4L2 && I2C diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile index 01ae9328e582..9858900168bf 100644 --- a/drivers/media/i2c/Makefile +++ b/drivers/media/i2c/Makefile @@ -18,7 +18,6 @@ obj-$(CONFIG_VIDEO_SAA711X) += saa7115.o obj-$(CONFIG_VIDEO_SAA717X) += saa717x.o obj-$(CONFIG_VIDEO_SAA7127) += saa7127.o obj-$(CONFIG_VIDEO_SAA7185) += saa7185.o -obj-$(CONFIG_VIDEO_SAA7191) += saa7191.o obj-$(CONFIG_VIDEO_SAA6752HS) += saa6752hs.o obj-$(CONFIG_VIDEO_ADV7170) += adv7170.o obj-$(CONFIG_VIDEO_ADV7175) += adv7175.o diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig index 0c61155699f7..dba29b80184b 100644 --- a/drivers/media/platform/Kconfig +++ b/drivers/media/platform/Kconfig @@ -65,14 +65,6 @@ config VIDEO_TIMBERDALE ---help--- Add support for the Video In peripherial of the timberdale FPGA. -config VIDEO_VINO - tristate "SGI Vino Video For Linux" - depends on I2C && SGI_IP22 && VIDEO_V4L2 - select VIDEO_SAA7191 if MEDIA_SUBDRV_AUTOSELECT - help - Say Y here to build in support for the Vino video input system found - on SGI Indy machines. - config VIDEO_M32R_AR tristate "AR devices" depends on VIDEO_V4L2 diff --git a/drivers/media/platform/Makefile b/drivers/media/platform/Makefile index b818afb4d336..a49936b8ce8a 100644 --- a/drivers/media/platform/Makefile +++ b/drivers/media/platform/Makefile @@ -2,9 +2,6 @@ # Makefile for the video capture/playback device drivers. # -obj-$(CONFIG_VIDEO_VINO) += indycam.o -obj-$(CONFIG_VIDEO_VINO) += vino.o - obj-$(CONFIG_VIDEO_TIMBERDALE) += timblogiw.o obj-$(CONFIG_VIDEO_M32R_AR_M64278) += arv.o diff --git a/drivers/staging/media/Kconfig b/drivers/staging/media/Kconfig index 96498b7fc20e..6dce44ed48b8 100644 --- a/drivers/staging/media/Kconfig +++ b/drivers/staging/media/Kconfig @@ -33,6 +33,8 @@ source "drivers/staging/media/mn88473/Kconfig" source "drivers/staging/media/omap4iss/Kconfig" +source "drivers/staging/media/vino/Kconfig" + # Keep LIRC at the end, as it has sub-menus source "drivers/staging/media/lirc/Kconfig" diff --git a/drivers/staging/media/Makefile b/drivers/staging/media/Makefile index 30fb352fc4a9..7b713e73bc59 100644 --- a/drivers/staging/media/Makefile +++ b/drivers/staging/media/Makefile @@ -6,4 +6,5 @@ obj-$(CONFIG_VIDEO_DM365_VPFE) += davinci_vpfe/ obj-$(CONFIG_VIDEO_OMAP4) += omap4iss/ obj-$(CONFIG_DVB_MN88472) += mn88472/ obj-$(CONFIG_DVB_MN88473) += mn88473/ +obj-y += vino/ diff --git a/drivers/staging/media/vino/Kconfig b/drivers/staging/media/vino/Kconfig new file mode 100644 index 000000000000..03700dadafd8 --- /dev/null +++ b/drivers/staging/media/vino/Kconfig @@ -0,0 +1,24 @@ +config VIDEO_VINO + tristate "SGI Vino Video For Linux (Deprecated)" + depends on I2C && SGI_IP22 && VIDEO_V4L2 + select VIDEO_SAA7191 if MEDIA_SUBDRV_AUTOSELECT + help + Say Y here to build in support for the Vino video input system found + on SGI Indy machines. + + This driver is deprecated and will be removed soon. If you have + hardware for this and you want to work on this driver, then contact + the linux-media mailinglist. + +config VIDEO_SAA7191 + tristate "Philips SAA7191 video decoder (Deprecated)" + depends on VIDEO_V4L2 && I2C + ---help--- + Support for the Philips SAA7191 video decoder. + + This driver is deprecated and will be removed soon. If you have + hardware for this and you want to work on this driver, then contact + the linux-media mailinglist. + + To compile this driver as a module, choose M here: the + module will be called saa7191. diff --git a/drivers/staging/media/vino/Makefile b/drivers/staging/media/vino/Makefile new file mode 100644 index 000000000000..914c2513687c --- /dev/null +++ b/drivers/staging/media/vino/Makefile @@ -0,0 +1,3 @@ +obj-$(CONFIG_VIDEO_VINO) += indycam.o +obj-$(CONFIG_VIDEO_VINO) += vino.o +obj-$(CONFIG_VIDEO_SAA7191) += saa7191.o diff --git a/drivers/media/platform/indycam.c b/drivers/staging/media/vino/indycam.c similarity index 100% rename from drivers/media/platform/indycam.c rename to drivers/staging/media/vino/indycam.c diff --git a/drivers/media/platform/indycam.h b/drivers/staging/media/vino/indycam.h similarity index 100% rename from drivers/media/platform/indycam.h rename to drivers/staging/media/vino/indycam.h diff --git a/drivers/media/i2c/saa7191.c b/drivers/staging/media/vino/saa7191.c similarity index 100% rename from drivers/media/i2c/saa7191.c rename to drivers/staging/media/vino/saa7191.c diff --git a/drivers/media/i2c/saa7191.h b/drivers/staging/media/vino/saa7191.h similarity index 100% rename from drivers/media/i2c/saa7191.h rename to drivers/staging/media/vino/saa7191.h diff --git a/drivers/media/platform/vino.c b/drivers/staging/media/vino/vino.c similarity index 100% rename from drivers/media/platform/vino.c rename to drivers/staging/media/vino/vino.c diff --git a/drivers/media/platform/vino.h b/drivers/staging/media/vino/vino.h similarity index 100% rename from drivers/media/platform/vino.h rename to drivers/staging/media/vino/vino.h From ea2e813e8cc3492c951b9895724fd47187e04a6f Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Tue, 2 Dec 2014 12:40:32 -0300 Subject: [PATCH 16/17] [media] tlg2300: move to staging in preparation for removal This driver hasn't been tested in a long, long time. The company that made this chip has gone bust many years ago and hardware using this chip is next to impossible to find. This driver needs to be converted to newer media frameworks but due to the lack of hardware that's going to be impossible. Since cheap alternatives are easily available, there is little point in keeping this driver alive. In other words, this driver is a prime candidate for removal. If someone is interested in working on this driver to prevent its removal, then please contact the linux-media mailinglist. Signed-off-by: Hans Verkuil Acked-by: Huang Shijie Signed-off-by: Mauro Carvalho Chehab --- drivers/media/usb/Kconfig | 1 - drivers/media/usb/Makefile | 1 - drivers/staging/media/Kconfig | 2 ++ drivers/staging/media/Makefile | 1 + drivers/{media/usb => staging/media}/tlg2300/Kconfig | 6 +++++- drivers/{media/usb => staging/media}/tlg2300/Makefile | 0 drivers/{media/usb => staging/media}/tlg2300/pd-alsa.c | 0 drivers/{media/usb => staging/media}/tlg2300/pd-common.h | 0 drivers/{media/usb => staging/media}/tlg2300/pd-dvb.c | 0 drivers/{media/usb => staging/media}/tlg2300/pd-main.c | 0 drivers/{media/usb => staging/media}/tlg2300/pd-radio.c | 0 drivers/{media/usb => staging/media}/tlg2300/pd-video.c | 0 drivers/{media/usb => staging/media}/tlg2300/vendorcmds.h | 0 13 files changed, 8 insertions(+), 3 deletions(-) rename drivers/{media/usb => staging/media}/tlg2300/Kconfig (63%) rename drivers/{media/usb => staging/media}/tlg2300/Makefile (100%) rename drivers/{media/usb => staging/media}/tlg2300/pd-alsa.c (100%) rename drivers/{media/usb => staging/media}/tlg2300/pd-common.h (100%) rename drivers/{media/usb => staging/media}/tlg2300/pd-dvb.c (100%) rename drivers/{media/usb => staging/media}/tlg2300/pd-main.c (100%) rename drivers/{media/usb => staging/media}/tlg2300/pd-radio.c (100%) rename drivers/{media/usb => staging/media}/tlg2300/pd-video.c (100%) rename drivers/{media/usb => staging/media}/tlg2300/vendorcmds.h (100%) diff --git a/drivers/media/usb/Kconfig b/drivers/media/usb/Kconfig index 056181f2f569..7496f332f3f5 100644 --- a/drivers/media/usb/Kconfig +++ b/drivers/media/usb/Kconfig @@ -24,7 +24,6 @@ if MEDIA_ANALOG_TV_SUPPORT comment "Analog TV USB devices" source "drivers/media/usb/pvrusb2/Kconfig" source "drivers/media/usb/hdpvr/Kconfig" -source "drivers/media/usb/tlg2300/Kconfig" source "drivers/media/usb/usbvision/Kconfig" source "drivers/media/usb/stk1160/Kconfig" source "drivers/media/usb/go7007/Kconfig" diff --git a/drivers/media/usb/Makefile b/drivers/media/usb/Makefile index 6f2eb7c8416c..8874ba774a34 100644 --- a/drivers/media/usb/Makefile +++ b/drivers/media/usb/Makefile @@ -16,7 +16,6 @@ obj-$(CONFIG_VIDEO_CPIA2) += cpia2/ obj-$(CONFIG_VIDEO_AU0828) += au0828/ obj-$(CONFIG_VIDEO_HDPVR) += hdpvr/ obj-$(CONFIG_VIDEO_PVRUSB2) += pvrusb2/ -obj-$(CONFIG_VIDEO_TLG2300) += tlg2300/ obj-$(CONFIG_VIDEO_USBVISION) += usbvision/ obj-$(CONFIG_VIDEO_STK1160) += stk1160/ obj-$(CONFIG_VIDEO_CX231XX) += cx231xx/ diff --git a/drivers/staging/media/Kconfig b/drivers/staging/media/Kconfig index 6dce44ed48b8..209b265f5f7a 100644 --- a/drivers/staging/media/Kconfig +++ b/drivers/staging/media/Kconfig @@ -27,6 +27,8 @@ source "drivers/staging/media/davinci_vpfe/Kconfig" source "drivers/staging/media/dt3155v4l/Kconfig" +source "drivers/staging/media/tlg2300/Kconfig" + source "drivers/staging/media/mn88472/Kconfig" source "drivers/staging/media/mn88473/Kconfig" diff --git a/drivers/staging/media/Makefile b/drivers/staging/media/Makefile index 7b713e73bc59..a0eec73b5174 100644 --- a/drivers/staging/media/Makefile +++ b/drivers/staging/media/Makefile @@ -6,5 +6,6 @@ obj-$(CONFIG_VIDEO_DM365_VPFE) += davinci_vpfe/ obj-$(CONFIG_VIDEO_OMAP4) += omap4iss/ obj-$(CONFIG_DVB_MN88472) += mn88472/ obj-$(CONFIG_DVB_MN88473) += mn88473/ +obj-$(CONFIG_VIDEO_TLG2300) += tlg2300/ obj-y += vino/ diff --git a/drivers/media/usb/tlg2300/Kconfig b/drivers/staging/media/tlg2300/Kconfig similarity index 63% rename from drivers/media/usb/tlg2300/Kconfig rename to drivers/staging/media/tlg2300/Kconfig index 645d915267e6..81784c6f7b88 100644 --- a/drivers/media/usb/tlg2300/Kconfig +++ b/drivers/staging/media/tlg2300/Kconfig @@ -1,5 +1,5 @@ config VIDEO_TLG2300 - tristate "Telegent TLG2300 USB video capture support" + tristate "Telegent TLG2300 USB video capture support (Deprecated)" depends on VIDEO_DEV && I2C && SND && DVB_CORE select VIDEO_TUNER select VIDEO_TVEEPROM @@ -12,5 +12,9 @@ config VIDEO_TLG2300 This is a video4linux driver for Telegent tlg2300 based TV cards. The driver supports V4L2, DVB-T and radio. + This driver is deprecated and will be removed soon. If you have + hardware for this and you want to work on this driver, then contact + the linux-media mailinglist. + To compile this driver as a module, choose M here: the module will be called poseidon diff --git a/drivers/media/usb/tlg2300/Makefile b/drivers/staging/media/tlg2300/Makefile similarity index 100% rename from drivers/media/usb/tlg2300/Makefile rename to drivers/staging/media/tlg2300/Makefile diff --git a/drivers/media/usb/tlg2300/pd-alsa.c b/drivers/staging/media/tlg2300/pd-alsa.c similarity index 100% rename from drivers/media/usb/tlg2300/pd-alsa.c rename to drivers/staging/media/tlg2300/pd-alsa.c diff --git a/drivers/media/usb/tlg2300/pd-common.h b/drivers/staging/media/tlg2300/pd-common.h similarity index 100% rename from drivers/media/usb/tlg2300/pd-common.h rename to drivers/staging/media/tlg2300/pd-common.h diff --git a/drivers/media/usb/tlg2300/pd-dvb.c b/drivers/staging/media/tlg2300/pd-dvb.c similarity index 100% rename from drivers/media/usb/tlg2300/pd-dvb.c rename to drivers/staging/media/tlg2300/pd-dvb.c diff --git a/drivers/media/usb/tlg2300/pd-main.c b/drivers/staging/media/tlg2300/pd-main.c similarity index 100% rename from drivers/media/usb/tlg2300/pd-main.c rename to drivers/staging/media/tlg2300/pd-main.c diff --git a/drivers/media/usb/tlg2300/pd-radio.c b/drivers/staging/media/tlg2300/pd-radio.c similarity index 100% rename from drivers/media/usb/tlg2300/pd-radio.c rename to drivers/staging/media/tlg2300/pd-radio.c diff --git a/drivers/media/usb/tlg2300/pd-video.c b/drivers/staging/media/tlg2300/pd-video.c similarity index 100% rename from drivers/media/usb/tlg2300/pd-video.c rename to drivers/staging/media/tlg2300/pd-video.c diff --git a/drivers/media/usb/tlg2300/vendorcmds.h b/drivers/staging/media/tlg2300/vendorcmds.h similarity index 100% rename from drivers/media/usb/tlg2300/vendorcmds.h rename to drivers/staging/media/tlg2300/vendorcmds.h From 427ae153c65ad7a08288d86baf99000569627d03 Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Tue, 2 Dec 2014 12:40:33 -0300 Subject: [PATCH 17/17] [media] bq/c-qcam, w9966, pms: move to staging in preparation for removal These drivers haven't been tested in a long, long time. The hardware is ancient and hopelessly obsolete. These drivers also need to be converted to newer media frameworks but due to the lack of hardware that's going to be impossible. In addition, cheaper and vastly better hardware is available today. So these drivers are a prime candidate for removal. If someone is interested in working on these drivers to prevent their removal, then please contact the linux-media mailinglist. Let's be honest, the age of parallel port webcams and ISA video capture boards is really gone. Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- drivers/media/Kconfig | 1 - drivers/media/Makefile | 2 +- drivers/staging/media/Kconfig | 2 ++ drivers/staging/media/Makefile | 1 + drivers/{ => staging}/media/parport/Kconfig | 24 +++++++++++++++---- drivers/{ => staging}/media/parport/Makefile | 0 drivers/{ => staging}/media/parport/bw-qcam.c | 0 drivers/{ => staging}/media/parport/c-qcam.c | 0 drivers/{ => staging}/media/parport/pms.c | 0 drivers/{ => staging}/media/parport/w9966.c | 0 10 files changed, 24 insertions(+), 6 deletions(-) rename drivers/{ => staging}/media/parport/Kconfig (65%) rename drivers/{ => staging}/media/parport/Makefile (100%) rename drivers/{ => staging}/media/parport/bw-qcam.c (100%) rename drivers/{ => staging}/media/parport/c-qcam.c (100%) rename drivers/{ => staging}/media/parport/pms.c (100%) rename drivers/{ => staging}/media/parport/w9966.c (100%) diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig index 3c89fcbc621e..49cd30870e0d 100644 --- a/drivers/media/Kconfig +++ b/drivers/media/Kconfig @@ -160,7 +160,6 @@ source "drivers/media/usb/Kconfig" source "drivers/media/pci/Kconfig" source "drivers/media/platform/Kconfig" source "drivers/media/mmc/Kconfig" -source "drivers/media/parport/Kconfig" source "drivers/media/radio/Kconfig" comment "Supported FireWire (IEEE 1394) Adapters" diff --git a/drivers/media/Makefile b/drivers/media/Makefile index 620f275a45c9..e608bbce0c35 100644 --- a/drivers/media/Makefile +++ b/drivers/media/Makefile @@ -28,6 +28,6 @@ obj-y += rc/ # Finally, merge the drivers that require the core # -obj-y += common/ platform/ pci/ usb/ mmc/ firewire/ parport/ +obj-y += common/ platform/ pci/ usb/ mmc/ firewire/ obj-$(CONFIG_VIDEO_DEV) += radio/ diff --git a/drivers/staging/media/Kconfig b/drivers/staging/media/Kconfig index 209b265f5f7a..2a054a99d433 100644 --- a/drivers/staging/media/Kconfig +++ b/drivers/staging/media/Kconfig @@ -35,6 +35,8 @@ source "drivers/staging/media/mn88473/Kconfig" source "drivers/staging/media/omap4iss/Kconfig" +source "drivers/staging/media/parport/Kconfig" + source "drivers/staging/media/vino/Kconfig" # Keep LIRC at the end, as it has sub-menus diff --git a/drivers/staging/media/Makefile b/drivers/staging/media/Makefile index a0eec73b5174..412b28408398 100644 --- a/drivers/staging/media/Makefile +++ b/drivers/staging/media/Makefile @@ -6,6 +6,7 @@ obj-$(CONFIG_VIDEO_DM365_VPFE) += davinci_vpfe/ obj-$(CONFIG_VIDEO_OMAP4) += omap4iss/ obj-$(CONFIG_DVB_MN88472) += mn88472/ obj-$(CONFIG_DVB_MN88473) += mn88473/ +obj-y += parport/ obj-$(CONFIG_VIDEO_TLG2300) += tlg2300/ obj-y += vino/ diff --git a/drivers/media/parport/Kconfig b/drivers/staging/media/parport/Kconfig similarity index 65% rename from drivers/media/parport/Kconfig rename to drivers/staging/media/parport/Kconfig index 948c981d9f05..15974efdba1d 100644 --- a/drivers/media/parport/Kconfig +++ b/drivers/staging/media/parport/Kconfig @@ -7,18 +7,22 @@ menuconfig MEDIA_PARPORT_SUPPORT if MEDIA_PARPORT_SUPPORT config VIDEO_BWQCAM - tristate "Quickcam BW Video For Linux" + tristate "Quickcam BW Video For Linux (Deprecated)" depends on PARPORT && VIDEO_V4L2 select VIDEOBUF2_VMALLOC help Say Y have if you the black and white version of the QuickCam camera. See the next option for the color version. + This driver is deprecated and will be removed soon. If you have + hardware for this and you want to work on this driver, then contact + the linux-media mailinglist. + To compile this driver as a module, choose M here: the module will be called bw-qcam. config VIDEO_CQCAM - tristate "QuickCam Colour Video For Linux" + tristate "QuickCam Colour Video For Linux (Deprecated)" depends on PARPORT && VIDEO_V4L2 help This is the video4linux driver for the colour version of the @@ -28,18 +32,26 @@ config VIDEO_CQCAM as a module (c-qcam). Read for more information. + This driver is deprecated and will be removed soon. If you have + hardware for this and you want to work on this driver, then contact + the linux-media mailinglist. + config VIDEO_PMS - tristate "Mediavision Pro Movie Studio Video For Linux" + tristate "Mediavision Pro Movie Studio Video For Linux (Deprecated)" depends on ISA && VIDEO_V4L2 help Say Y if you have the ISA Mediavision Pro Movie Studio capture card. + This driver is deprecated and will be removed soon. If you have + hardware for this and you want to work on this driver, then contact + the linux-media mailinglist. + To compile this driver as a module, choose M here: the module will be called pms. config VIDEO_W9966 - tristate "W9966CF Webcam (FlyCam Supra and others) Video For Linux" + tristate "W9966CF Webcam (FlyCam Supra and others) Video For Linux (Deprecated)" depends on PARPORT_1284 && PARPORT && VIDEO_V4L2 help Video4linux driver for Winbond's w9966 based Webcams. @@ -50,4 +62,8 @@ config VIDEO_W9966 Check out for more information. + + This driver is deprecated and will be removed soon. If you have + hardware for this and you want to work on this driver, then contact + the linux-media mailinglist. endif diff --git a/drivers/media/parport/Makefile b/drivers/staging/media/parport/Makefile similarity index 100% rename from drivers/media/parport/Makefile rename to drivers/staging/media/parport/Makefile diff --git a/drivers/media/parport/bw-qcam.c b/drivers/staging/media/parport/bw-qcam.c similarity index 100% rename from drivers/media/parport/bw-qcam.c rename to drivers/staging/media/parport/bw-qcam.c diff --git a/drivers/media/parport/c-qcam.c b/drivers/staging/media/parport/c-qcam.c similarity index 100% rename from drivers/media/parport/c-qcam.c rename to drivers/staging/media/parport/c-qcam.c diff --git a/drivers/media/parport/pms.c b/drivers/staging/media/parport/pms.c similarity index 100% rename from drivers/media/parport/pms.c rename to drivers/staging/media/parport/pms.c diff --git a/drivers/media/parport/w9966.c b/drivers/staging/media/parport/w9966.c similarity index 100% rename from drivers/media/parport/w9966.c rename to drivers/staging/media/parport/w9966.c