media: atomisp_ov2680: Fix 1280x720 -> 1296x736 resolution
authorHans de Goede <hdegoede@redhat.com>
Sun, 23 Oct 2022 23:05:08 +0000 (00:05 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Fri, 25 Nov 2022 08:25:16 +0000 (08:25 +0000)
The ov2680_720p_30fps register init list used for the 1296x736 resolution
sets the hsize register to 1296 and the vsize register to 736.

This is actually the right thing to do when combined with the atomISP2
because the ISP requires 16 bytes padding leaving userspace to see
1280x720.

But the resolution list entries for this was incorrectly reporting
the resolution being send to the ISP as already being 1280x720,
leaving usespace to see 1274x704 as resolution.

Worse then userspace seeing a weird resolution selecting the
1280x720 sensor resolution (which in reality is sending 1296x736)
to the ISP was causing the ISP to hang on Cherry Trail based tablets
(Bay Trail works fine for some reason).

This commit also adds a bunch of comments annotating what
the various register writes the init lists are doing.

Reviewed-by: Andy Shevchenko <andy@kernel.org>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/staging/media/atomisp/i2c/ov2680.h

index 4e35119..7ab337b 100644 (file)
@@ -485,19 +485,19 @@ static struct ov2680_reg const ov2680_720x592_30fps[] = {
 static struct ov2680_reg const ov2680_800x600_30fps[] = {
        {0x3086, 0x01},
        {0x370a, 0x23},
-       {0x3801, 0x00},
+       {0x3801, 0x00}, /* hstart 0 */
        {0x3802, 0x00},
-       {0x3803, 0x00},
+       {0x3803, 0x00}, /* vstart 0 */
        {0x3804, 0x06},
-       {0x3805, 0x4f},
+       {0x3805, 0x4f}, /* hend 1615 */
        {0x3806, 0x04},
-       {0x3807, 0xbf},
+       {0x3807, 0xbf}, /* vend 1215 */
        {0x3808, 0x03},
-       {0x3809, 0x20},
+       {0x3809, 0x20}, /* hsize 800 */
        {0x380a, 0x02},
-       {0x380b, 0x58},
+       {0x380b, 0x58}, /* vsize 600 */
        {0x380c, 0x06},
-       {0x380d, 0xac},
+       {0x380d, 0xac}, /* htotal 1708 */
        {0x3810, 0x00},
        {0x3811, 0x00},
        {0x3812, 0x00},
@@ -524,19 +524,19 @@ static struct ov2680_reg const ov2680_800x600_30fps[] = {
 static struct ov2680_reg const ov2680_720p_30fps[] = {
        {0x3086, 0x00},
        {0x370a, 0x21},
-       {0x3801, 0xa0},
+       {0x3801, 0xa0}, /* hstart 160 */
        {0x3802, 0x00},
-       {0x3803, 0xf2},
+       {0x3803, 0xf2}, /* vstart 242 */
        {0x3804, 0x05},
-       {0x3805, 0xbf},
+       {0x3805, 0xbf}, /* hend 1471 */
        {0x3806, 0x03},
-       {0x3807, 0xdd},
+       {0x3807, 0xdd}, /* vend 989 */
        {0x3808, 0x05},
-       {0x3809, 0x10},
+       {0x3809, 0x10}, /* hsize 1296 */
        {0x380a, 0x02},
-       {0x380b, 0xe0},
+       {0x380b, 0xe0}, /* vsize 736 */
        {0x380c, 0x06},
-       {0x380d, 0xa8},
+       {0x380d, 0xa8}, /* htotal 1704 */
        {0x3810, 0x00},
        {0x3811, 0x08},
        {0x3812, 0x00},
@@ -563,19 +563,19 @@ static struct ov2680_reg const ov2680_720p_30fps[] = {
 static struct ov2680_reg const ov2680_1296x976_30fps[] = {
        {0x3086, 0x00},
        {0x370a, 0x21},
-       {0x3801, 0xa0},
+       {0x3801, 0xa0}, /* hstart 160 */
        {0x3802, 0x00},
-       {0x3803, 0x78},
+       {0x3803, 0x78}, /* vstart 120 */
        {0x3804, 0x05},
-       {0x3805, 0xbf},
+       {0x3805, 0xbf}, /* hend 1471 */
        {0x3806, 0x04},
-       {0x3807, 0x57},
+       {0x3807, 0x57}, /* vend 1111 */
        {0x3808, 0x05},
-       {0x3809, 0x10},
+       {0x3809, 0x10}, /* hsize 1296 */
        {0x380a, 0x03},
-       {0x380b, 0xd0},
+       {0x380b, 0xd0}, /* vsize 976 */
        {0x380c, 0x06},
-       {0x380d, 0xa8},
+       {0x380d, 0xa8}, /* htotal 1704 */
        {0x3810, 0x00},
        {0x3811, 0x08},
        {0x3812, 0x00},
@@ -820,8 +820,8 @@ static struct ov2680_resolution ov2680_res_preview[] = {
                .regs = ov2680_1296x976_30fps,
        },
        {
-               .width = 1280,
-               .height = 720,
+               .width = 1296,
+               .height = 736,
                .fps = 60,
                .pix_clk_freq = 66,
                .pixels_per_line = 1698,//1704,