* Re: [patch] [media] stk-webcam: fix an endian bug in stk_camera_read_reg()
2016-11-15 9:48 [patch] [media] stk-webcam: fix an endian bug in stk_camera_read_reg() Dan Carpenter
2016-11-15 14:46 ` kbuild test robot
@ 2016-11-15 16:31 ` kbuild test robot
2016-11-16 11:11 ` [patch v2] " Dan Carpenter
2 siblings, 0 replies; 4+ messages in thread
From: kbuild test robot @ 2016-11-15 16:31 UTC (permalink / raw)
To: Dan Carpenter
Cc: kbuild-all, Mauro Carvalho Chehab, Wolfram Sang,
Greg Kroah-Hartman, Hans Verkuil, linux-media, kernel-janitors
[-- Attachment #1: Type: text/plain, Size: 35350 bytes --]
Hi Dan,
[auto build test WARNING on linuxtv-media/master]
[also build test WARNING on v4.9-rc5 next-20161115]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Dan-Carpenter/stk-webcam-fix-an-endian-bug-in-stk_camera_read_reg/20161115-213514
base: git://linuxtv.org/media_tree.git master
config: x86_64-randconfig-s5-11152316 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
All warnings (new ones prefixed by >>):
In file included from include/uapi/linux/stddef.h:1:0,
from include/linux/stddef.h:4,
from include/uapi/linux/posix_types.h:4,
from include/uapi/linux/types.h:13,
from include/linux/types.h:5,
from include/linux/mod_devicetable.h:11,
from include/linux/usb.h:4,
from drivers/media/usb/stkwebcam/stk-webcam.h:25,
from drivers/media/usb/stkwebcam/stk-sensor.c:48:
drivers/media/usb/stkwebcam/stk-sensor.c: In function 'stk_sensor_outb':
drivers/media/usb/stkwebcam/stk-sensor.c:240:46: error: passing argument 3 of 'stk_camera_read_reg' from incompatible pointer type [-Werror=incompatible-pointer-types]
if (stk_camera_read_reg(dev, STK_IIC_STAT, &tmpval))
^
include/linux/compiler.h:149:30: note: in definition of macro '__trace_if'
if (__builtin_constant_p(!!(cond)) ? !!(cond) : \
^~~~
>> drivers/media/usb/stkwebcam/stk-sensor.c:240:3: note: in expansion of macro 'if'
if (stk_camera_read_reg(dev, STK_IIC_STAT, &tmpval))
^~
In file included from drivers/media/usb/stkwebcam/stk-sensor.c:48:0:
drivers/media/usb/stkwebcam/stk-webcam.h:132:5: note: expected 'u8 * {aka unsigned char *}' but argument is of type 'int *'
int stk_camera_read_reg(struct stk_camera *, u16, u8 *);
^~~~~~~~~~~~~~~~~~~
In file included from include/uapi/linux/stddef.h:1:0,
from include/linux/stddef.h:4,
from include/uapi/linux/posix_types.h:4,
from include/uapi/linux/types.h:13,
from include/linux/types.h:5,
from include/linux/mod_devicetable.h:11,
from include/linux/usb.h:4,
from drivers/media/usb/stkwebcam/stk-webcam.h:25,
from drivers/media/usb/stkwebcam/stk-sensor.c:48:
drivers/media/usb/stkwebcam/stk-sensor.c:240:46: error: passing argument 3 of 'stk_camera_read_reg' from incompatible pointer type [-Werror=incompatible-pointer-types]
if (stk_camera_read_reg(dev, STK_IIC_STAT, &tmpval))
^
include/linux/compiler.h:149:42: note: in definition of macro '__trace_if'
if (__builtin_constant_p(!!(cond)) ? !!(cond) : \
^~~~
>> drivers/media/usb/stkwebcam/stk-sensor.c:240:3: note: in expansion of macro 'if'
if (stk_camera_read_reg(dev, STK_IIC_STAT, &tmpval))
^~
In file included from drivers/media/usb/stkwebcam/stk-sensor.c:48:0:
drivers/media/usb/stkwebcam/stk-webcam.h:132:5: note: expected 'u8 * {aka unsigned char *}' but argument is of type 'int *'
int stk_camera_read_reg(struct stk_camera *, u16, u8 *);
^~~~~~~~~~~~~~~~~~~
In file included from include/uapi/linux/stddef.h:1:0,
from include/linux/stddef.h:4,
from include/uapi/linux/posix_types.h:4,
from include/uapi/linux/types.h:13,
from include/linux/types.h:5,
from include/linux/mod_devicetable.h:11,
from include/linux/usb.h:4,
from drivers/media/usb/stkwebcam/stk-webcam.h:25,
from drivers/media/usb/stkwebcam/stk-sensor.c:48:
drivers/media/usb/stkwebcam/stk-sensor.c:240:46: error: passing argument 3 of 'stk_camera_read_reg' from incompatible pointer type [-Werror=incompatible-pointer-types]
if (stk_camera_read_reg(dev, STK_IIC_STAT, &tmpval))
^
include/linux/compiler.h:160:16: note: in definition of macro '__trace_if'
______r = !!(cond); \
^~~~
>> drivers/media/usb/stkwebcam/stk-sensor.c:240:3: note: in expansion of macro 'if'
if (stk_camera_read_reg(dev, STK_IIC_STAT, &tmpval))
^~
In file included from drivers/media/usb/stkwebcam/stk-sensor.c:48:0:
drivers/media/usb/stkwebcam/stk-webcam.h:132:5: note: expected 'u8 * {aka unsigned char *}' but argument is of type 'int *'
int stk_camera_read_reg(struct stk_camera *, u16, u8 *);
^~~~~~~~~~~~~~~~~~~
In file included from include/uapi/linux/stddef.h:1:0,
from include/linux/stddef.h:4,
from include/uapi/linux/posix_types.h:4,
from include/uapi/linux/types.h:13,
from include/linux/types.h:5,
from include/linux/mod_devicetable.h:11,
from include/linux/usb.h:4,
from drivers/media/usb/stkwebcam/stk-webcam.h:25,
from drivers/media/usb/stkwebcam/stk-sensor.c:48:
drivers/media/usb/stkwebcam/stk-sensor.c: In function 'stk_sensor_inb':
drivers/media/usb/stkwebcam/stk-sensor.c:263:46: error: passing argument 3 of 'stk_camera_read_reg' from incompatible pointer type [-Werror=incompatible-pointer-types]
if (stk_camera_read_reg(dev, STK_IIC_STAT, &tmpval))
^
include/linux/compiler.h:149:30: note: in definition of macro '__trace_if'
if (__builtin_constant_p(!!(cond)) ? !!(cond) : \
^~~~
drivers/media/usb/stkwebcam/stk-sensor.c:263:3: note: in expansion of macro 'if'
if (stk_camera_read_reg(dev, STK_IIC_STAT, &tmpval))
^~
In file included from drivers/media/usb/stkwebcam/stk-sensor.c:48:0:
drivers/media/usb/stkwebcam/stk-webcam.h:132:5: note: expected 'u8 * {aka unsigned char *}' but argument is of type 'int *'
int stk_camera_read_reg(struct stk_camera *, u16, u8 *);
^~~~~~~~~~~~~~~~~~~
In file included from include/uapi/linux/stddef.h:1:0,
from include/linux/stddef.h:4,
from include/uapi/linux/posix_types.h:4,
from include/uapi/linux/types.h:13,
from include/linux/types.h:5,
from include/linux/mod_devicetable.h:11,
from include/linux/usb.h:4,
from drivers/media/usb/stkwebcam/stk-webcam.h:25,
from drivers/media/usb/stkwebcam/stk-sensor.c:48:
drivers/media/usb/stkwebcam/stk-sensor.c:263:46: error: passing argument 3 of 'stk_camera_read_reg' from incompatible pointer type [-Werror=incompatible-pointer-types]
if (stk_camera_read_reg(dev, STK_IIC_STAT, &tmpval))
^
include/linux/compiler.h:149:42: note: in definition of macro '__trace_if'
if (__builtin_constant_p(!!(cond)) ? !!(cond) : \
^~~~
drivers/media/usb/stkwebcam/stk-sensor.c:263:3: note: in expansion of macro 'if'
if (stk_camera_read_reg(dev, STK_IIC_STAT, &tmpval))
^~
In file included from drivers/media/usb/stkwebcam/stk-sensor.c:48:0:
drivers/media/usb/stkwebcam/stk-webcam.h:132:5: note: expected 'u8 * {aka unsigned char *}' but argument is of type 'int *'
int stk_camera_read_reg(struct stk_camera *, u16, u8 *);
^~~~~~~~~~~~~~~~~~~
In file included from include/uapi/linux/stddef.h:1:0,
from include/linux/stddef.h:4,
from include/uapi/linux/posix_types.h:4,
from include/uapi/linux/types.h:13,
from include/linux/types.h:5,
from include/linux/mod_devicetable.h:11,
from include/linux/usb.h:4,
from drivers/media/usb/stkwebcam/stk-webcam.h:25,
from drivers/media/usb/stkwebcam/stk-sensor.c:48:
drivers/media/usb/stkwebcam/stk-sensor.c:263:46: error: passing argument 3 of 'stk_camera_read_reg' from incompatible pointer type [-Werror=incompatible-pointer-types]
if (stk_camera_read_reg(dev, STK_IIC_STAT, &tmpval))
^
include/linux/compiler.h:160:16: note: in definition of macro '__trace_if'
______r = !!(cond); \
^~~~
drivers/media/usb/stkwebcam/stk-sensor.c:263:3: note: in expansion of macro 'if'
if (stk_camera_read_reg(dev, STK_IIC_STAT, &tmpval))
^~
In file included from drivers/media/usb/stkwebcam/stk-sensor.c:48:0:
drivers/media/usb/stkwebcam/stk-webcam.h:132:5: note: expected 'u8 * {aka unsigned char *}' but argument is of type 'int *'
int stk_camera_read_reg(struct stk_camera *, u16, u8 *);
^~~~~~~~~~~~~~~~~~~
In file included from include/uapi/linux/stddef.h:1:0,
from include/linux/stddef.h:4,
from include/uapi/linux/posix_types.h:4,
from include/uapi/linux/types.h:13,
from include/linux/types.h:5,
from include/linux/mod_devicetable.h:11,
from include/linux/usb.h:4,
from drivers/media/usb/stkwebcam/stk-webcam.h:25,
from drivers/media/usb/stkwebcam/stk-sensor.c:48:
drivers/media/usb/stkwebcam/stk-sensor.c:274:49: error: passing argument 3 of 'stk_camera_read_reg' from incompatible pointer type [-Werror=incompatible-pointer-types]
if (stk_camera_read_reg(dev, STK_IIC_RX_VALUE, &tmpval))
^
include/linux/compiler.h:149:30: note: in definition of macro '__trace_if'
if (__builtin_constant_p(!!(cond)) ? !!(cond) : \
^~~~
drivers/media/usb/stkwebcam/stk-sensor.c:274:2: note: in expansion of macro 'if'
if (stk_camera_read_reg(dev, STK_IIC_RX_VALUE, &tmpval))
^~
In file included from drivers/media/usb/stkwebcam/stk-sensor.c:48:0:
drivers/media/usb/stkwebcam/stk-webcam.h:132:5: note: expected 'u8 * {aka unsigned char *}' but argument is of type 'int *'
int stk_camera_read_reg(struct stk_camera *, u16, u8 *);
^~~~~~~~~~~~~~~~~~~
In file included from include/uapi/linux/stddef.h:1:0,
from include/linux/stddef.h:4,
from include/uapi/linux/posix_types.h:4,
from include/uapi/linux/types.h:13,
from include/linux/types.h:5,
vim +/if +240 drivers/media/usb/stkwebcam/stk-sensor.c
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 42 * output 0x0005 to index 0x0200
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 43 * input 1 byte from index 0x0201 until its value becomes 0x04
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 44 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 45
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 46 /* It seems the i2c bus is controlled with these registers */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 47
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 @48 #include "stk-webcam.h"
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 49
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 50 #define STK_IIC_BASE (0x0200)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 51 # define STK_IIC_OP (STK_IIC_BASE)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 52 # define STK_IIC_OP_TX (0x05)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 53 # define STK_IIC_OP_RX (0x70)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 54 # define STK_IIC_STAT (STK_IIC_BASE+1)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 55 # define STK_IIC_STAT_TX_OK (0x04)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 56 # define STK_IIC_STAT_RX_OK (0x01)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 57 /* I don't know what does this register.
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 58 * when it is 0x00 or 0x01, we cannot talk to the sensor,
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 59 * other values work */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 60 # define STK_IIC_ENABLE (STK_IIC_BASE+2)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 61 # define STK_IIC_ENABLE_NO (0x00)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 62 /* This is what the driver writes in windows */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 63 # define STK_IIC_ENABLE_YES (0x1e)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 64 /*
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 65 * Address of the slave. Seems like the binary driver look for the
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 66 * sensor in multiple places, attempting a reset sequence.
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 67 * We only know about the ov9650
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 68 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 69 # define STK_IIC_ADDR (STK_IIC_BASE+3)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 70 # define STK_IIC_TX_INDEX (STK_IIC_BASE+4)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 71 # define STK_IIC_TX_VALUE (STK_IIC_BASE+5)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 72 # define STK_IIC_RX_INDEX (STK_IIC_BASE+8)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 73 # define STK_IIC_RX_VALUE (STK_IIC_BASE+9)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 74
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 75 #define MAX_RETRIES (50)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 76
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 77 #define SENSOR_ADDRESS (0x60)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 78
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 79 /* From ov7670.c (These registers aren't fully accurate) */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 80
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 81 /* Registers */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 82 #define REG_GAIN 0x00 /* Gain lower 8 bits (rest in vref) */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 83 #define REG_BLUE 0x01 /* blue gain */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 84 #define REG_RED 0x02 /* red gain */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 85 #define REG_VREF 0x03 /* Pieces of GAIN, VSTART, VSTOP */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 86 #define REG_COM1 0x04 /* Control 1 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 87 #define COM1_CCIR656 0x40 /* CCIR656 enable */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 88 #define COM1_QFMT 0x20 /* QVGA/QCIF format */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 89 #define COM1_SKIP_0 0x00 /* Do not skip any row */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 90 #define COM1_SKIP_2 0x04 /* Skip 2 rows of 4 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 91 #define COM1_SKIP_3 0x08 /* Skip 3 rows of 4 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 92 #define REG_BAVE 0x05 /* U/B Average level */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 93 #define REG_GbAVE 0x06 /* Y/Gb Average level */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 94 #define REG_AECHH 0x07 /* AEC MS 5 bits */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 95 #define REG_RAVE 0x08 /* V/R Average level */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 96 #define REG_COM2 0x09 /* Control 2 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 97 #define COM2_SSLEEP 0x10 /* Soft sleep mode */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 98 #define REG_PID 0x0a /* Product ID MSB */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 99 #define REG_VER 0x0b /* Product ID LSB */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 100 #define REG_COM3 0x0c /* Control 3 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 101 #define COM3_SWAP 0x40 /* Byte swap */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 102 #define COM3_SCALEEN 0x08 /* Enable scaling */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 103 #define COM3_DCWEN 0x04 /* Enable downsamp/crop/window */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 104 #define REG_COM4 0x0d /* Control 4 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 105 #define REG_COM5 0x0e /* All "reserved" */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 106 #define REG_COM6 0x0f /* Control 6 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 107 #define REG_AECH 0x10 /* More bits of AEC value */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 108 #define REG_CLKRC 0x11 /* Clock control */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 109 #define CLK_PLL 0x80 /* Enable internal PLL */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 110 #define CLK_EXT 0x40 /* Use external clock directly */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 111 #define CLK_SCALE 0x3f /* Mask for internal clock scale */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 112 #define REG_COM7 0x12 /* Control 7 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 113 #define COM7_RESET 0x80 /* Register reset */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 114 #define COM7_FMT_MASK 0x38
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 115 #define COM7_FMT_SXGA 0x00
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 116 #define COM7_FMT_VGA 0x40
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 117 #define COM7_FMT_CIF 0x20 /* CIF format */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 118 #define COM7_FMT_QVGA 0x10 /* QVGA format */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 119 #define COM7_FMT_QCIF 0x08 /* QCIF format */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 120 #define COM7_RGB 0x04 /* bits 0 and 2 - RGB format */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 121 #define COM7_YUV 0x00 /* YUV */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 122 #define COM7_BAYER 0x01 /* Bayer format */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 123 #define COM7_PBAYER 0x05 /* "Processed bayer" */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 124 #define REG_COM8 0x13 /* Control 8 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 125 #define COM8_FASTAEC 0x80 /* Enable fast AGC/AEC */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 126 #define COM8_AECSTEP 0x40 /* Unlimited AEC step size */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 127 #define COM8_BFILT 0x20 /* Band filter enable */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 128 #define COM8_AGC 0x04 /* Auto gain enable */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 129 #define COM8_AWB 0x02 /* White balance enable */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 130 #define COM8_AEC 0x01 /* Auto exposure enable */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 131 #define REG_COM9 0x14 /* Control 9 - gain ceiling */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 132 #define REG_COM10 0x15 /* Control 10 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 133 #define COM10_HSYNC 0x40 /* HSYNC instead of HREF */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 134 #define COM10_PCLK_HB 0x20 /* Suppress PCLK on horiz blank */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 135 #define COM10_HREF_REV 0x08 /* Reverse HREF */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 136 #define COM10_VS_LEAD 0x04 /* VSYNC on clock leading edge */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 137 #define COM10_VS_NEG 0x02 /* VSYNC negative */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 138 #define COM10_HS_NEG 0x01 /* HSYNC negative */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 139 #define REG_HSTART 0x17 /* Horiz start high bits */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 140 #define REG_HSTOP 0x18 /* Horiz stop high bits */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 141 #define REG_VSTART 0x19 /* Vert start high bits */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 142 #define REG_VSTOP 0x1a /* Vert stop high bits */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 143 #define REG_PSHFT 0x1b /* Pixel delay after HREF */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 144 #define REG_MIDH 0x1c /* Manuf. ID high */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 145 #define REG_MIDL 0x1d /* Manuf. ID low */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 146 #define REG_MVFP 0x1e /* Mirror / vflip */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 147 #define MVFP_MIRROR 0x20 /* Mirror image */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 148 #define MVFP_FLIP 0x10 /* Vertical flip */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 149
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 150 #define REG_AEW 0x24 /* AGC upper limit */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 151 #define REG_AEB 0x25 /* AGC lower limit */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 152 #define REG_VPT 0x26 /* AGC/AEC fast mode op region */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 153 #define REG_ADVFL 0x2d /* Insert dummy lines (LSB) */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 154 #define REG_ADVFH 0x2e /* Insert dummy lines (MSB) */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 155 #define REG_HSYST 0x30 /* HSYNC rising edge delay */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 156 #define REG_HSYEN 0x31 /* HSYNC falling edge delay */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 157 #define REG_HREF 0x32 /* HREF pieces */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 158 #define REG_TSLB 0x3a /* lots of stuff */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 159 #define TSLB_YLAST 0x04 /* UYVY or VYUY - see com13 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 160 #define TSLB_BYTEORD 0x08 /* swap bytes in 16bit mode? */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 161 #define REG_COM11 0x3b /* Control 11 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 162 #define COM11_NIGHT 0x80 /* NIght mode enable */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 163 #define COM11_NMFR 0x60 /* Two bit NM frame rate */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 164 #define COM11_HZAUTO 0x10 /* Auto detect 50/60 Hz */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 165 #define COM11_50HZ 0x08 /* Manual 50Hz select */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 166 #define COM11_EXP 0x02
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 167 #define REG_COM12 0x3c /* Control 12 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 168 #define COM12_HREF 0x80 /* HREF always */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 169 #define REG_COM13 0x3d /* Control 13 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 170 #define COM13_GAMMA 0x80 /* Gamma enable */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 171 #define COM13_UVSAT 0x40 /* UV saturation auto adjustment */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 172 #define COM13_CMATRIX 0x10 /* Enable color matrix for RGB or YUV */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 173 #define COM13_UVSWAP 0x01 /* V before U - w/TSLB */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 174 #define REG_COM14 0x3e /* Control 14 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 175 #define COM14_DCWEN 0x10 /* DCW/PCLK-scale enable */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 176 #define REG_EDGE 0x3f /* Edge enhancement factor */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 177 #define REG_COM15 0x40 /* Control 15 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 178 #define COM15_R10F0 0x00 /* Data range 10 to F0 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 179 #define COM15_R01FE 0x80 /* 01 to FE */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 180 #define COM15_R00FF 0xc0 /* 00 to FF */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 181 #define COM15_RGB565 0x10 /* RGB565 output */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 182 #define COM15_RGBFIXME 0x20 /* FIXME */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 183 #define COM15_RGB555 0x30 /* RGB555 output */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 184 #define REG_COM16 0x41 /* Control 16 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 185 #define COM16_AWBGAIN 0x08 /* AWB gain enable */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 186 #define REG_COM17 0x42 /* Control 17 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 187 #define COM17_AECWIN 0xc0 /* AEC window - must match COM4 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 188 #define COM17_CBAR 0x08 /* DSP Color bar */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 189
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 190 /*
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 191 * This matrix defines how the colors are generated, must be
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 192 * tweaked to adjust hue and saturation.
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 193 *
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 194 * Order: v-red, v-green, v-blue, u-red, u-green, u-blue
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 195 *
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 196 * They are nine-bit signed quantities, with the sign bit
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 197 * stored in 0x58. Sign for v-red is bit 0, and up from there.
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 198 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 199 #define REG_CMATRIX_BASE 0x4f
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 200 #define CMATRIX_LEN 6
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 201 #define REG_CMATRIX_SIGN 0x58
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 202
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 203
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 204 #define REG_BRIGHT 0x55 /* Brightness */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 205 #define REG_CONTRAS 0x56 /* Contrast control */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 206
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 207 #define REG_GFIX 0x69 /* Fix gain control */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 208
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 209 #define REG_RGB444 0x8c /* RGB 444 control */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 210 #define R444_ENABLE 0x02 /* Turn on RGB444, overrides 5x5 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 211 #define R444_RGBX 0x01 /* Empty nibble at end */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 212
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 213 #define REG_HAECC1 0x9f /* Hist AEC/AGC control 1 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 214 #define REG_HAECC2 0xa0 /* Hist AEC/AGC control 2 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 215
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 216 #define REG_BD50MAX 0xa5 /* 50hz banding step limit */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 217 #define REG_HAECC3 0xa6 /* Hist AEC/AGC control 3 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 218 #define REG_HAECC4 0xa7 /* Hist AEC/AGC control 4 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 219 #define REG_HAECC5 0xa8 /* Hist AEC/AGC control 5 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 220 #define REG_HAECC6 0xa9 /* Hist AEC/AGC control 6 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 221 #define REG_HAECC7 0xaa /* Hist AEC/AGC control 7 */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 222 #define REG_BD60MAX 0xab /* 60hz banding step limit */
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 223
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 224
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 225
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 226
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 227 /* Returns 0 if OK */
fe2b8f50 drivers/media/video/stk-sensor.c Adrian Bunk 2008-01-28 228 static int stk_sensor_outb(struct stk_camera *dev, u8 reg, u8 val)
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 229 {
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 230 int i = 0;
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 231 int tmpval = 0;
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 232
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 233 if (stk_camera_write_reg(dev, STK_IIC_TX_INDEX, reg))
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 234 return 1;
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 235 if (stk_camera_write_reg(dev, STK_IIC_TX_VALUE, val))
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 236 return 1;
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 237 if (stk_camera_write_reg(dev, STK_IIC_OP, STK_IIC_OP_TX))
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 238 return 1;
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 239 do {
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 @240 if (stk_camera_read_reg(dev, STK_IIC_STAT, &tmpval))
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 241 return 1;
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 242 i++;
ec16dae5 drivers/media/video/stk-sensor.c Jaime Velasco Juan 2008-01-12 243 } while (tmpval == 0 && i < MAX_RETRIES);
:::::: The code at line 240 was first introduced by commit
:::::: ec16dae5453eafd1586f35c4ec1ef854e5a808e0 V4L/DVB (7019): V4L: add support for Syntek DC1125 webcams
:::::: TO: Jaime Velasco Juan <jsagarribay@gmail.com>
:::::: CC: Mauro Carvalho Chehab <mchehab@infradead.org>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 30022 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread* [patch v2] [media] stk-webcam: fix an endian bug in stk_camera_read_reg()
2016-11-15 9:48 [patch] [media] stk-webcam: fix an endian bug in stk_camera_read_reg() Dan Carpenter
2016-11-15 14:46 ` kbuild test robot
2016-11-15 16:31 ` kbuild test robot
@ 2016-11-16 11:11 ` Dan Carpenter
2 siblings, 0 replies; 4+ messages in thread
From: Dan Carpenter @ 2016-11-16 11:11 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: Wolfram Sang, Greg Kroah-Hartman, Hans Verkuil, linux-media,
kernel-janitors
We pass an int pointer to stk_camera_read_reg() but only write to the
highest byte. It's a bug on big endian systems and generally a nasty
thing to do and doesn't match the write function either.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
v2: I forgot to update stk-sensor.c in version 1.
diff --git a/drivers/media/usb/stkwebcam/stk-webcam.h b/drivers/media/usb/stkwebcam/stk-webcam.h
index 9bbfa3d..92bb48e 100644
--- a/drivers/media/usb/stkwebcam/stk-webcam.h
+++ b/drivers/media/usb/stkwebcam/stk-webcam.h
@@ -129,7 +129,7 @@ struct stk_camera {
#define vdev_to_camera(d) container_of(d, struct stk_camera, vdev)
int stk_camera_write_reg(struct stk_camera *, u16, u8);
-int stk_camera_read_reg(struct stk_camera *, u16, int *);
+int stk_camera_read_reg(struct stk_camera *, u16, u8 *);
int stk_sensor_init(struct stk_camera *);
int stk_sensor_configure(struct stk_camera *);
diff --git a/drivers/media/usb/stkwebcam/stk-webcam.c b/drivers/media/usb/stkwebcam/stk-webcam.c
index 22a9aae..1c48f2f 100644
--- a/drivers/media/usb/stkwebcam/stk-webcam.c
+++ b/drivers/media/usb/stkwebcam/stk-webcam.c
@@ -144,7 +144,7 @@ int stk_camera_write_reg(struct stk_camera *dev, u16 index, u8 value)
return 0;
}
-int stk_camera_read_reg(struct stk_camera *dev, u16 index, int *value)
+int stk_camera_read_reg(struct stk_camera *dev, u16 index, u8 *value)
{
struct usb_device *udev = dev->udev;
unsigned char *buf;
@@ -163,7 +163,7 @@ int stk_camera_read_reg(struct stk_camera *dev, u16 index, int *value)
sizeof(u8),
500);
if (ret >= 0)
- memcpy(value, buf, sizeof(u8));
+ *value = *buf;
kfree(buf);
return ret;
@@ -171,9 +171,10 @@ int stk_camera_read_reg(struct stk_camera *dev, u16 index, int *value)
static int stk_start_stream(struct stk_camera *dev)
{
- int value;
+ u8 value;
int i, ret;
- int value_116, value_117;
+ u8 value_116, value_117;
+
if (!is_present(dev))
return -ENODEV;
@@ -213,7 +214,7 @@ static int stk_start_stream(struct stk_camera *dev)
static int stk_stop_stream(struct stk_camera *dev)
{
- int value;
+ u8 value;
int i;
if (is_present(dev)) {
stk_camera_read_reg(dev, 0x0100, &value);
diff --git a/drivers/media/usb/stkwebcam/stk-sensor.c b/drivers/media/usb/stkwebcam/stk-sensor.c
index e546b01..2dcc8d0 100644
--- a/drivers/media/usb/stkwebcam/stk-sensor.c
+++ b/drivers/media/usb/stkwebcam/stk-sensor.c
@@ -228,7 +228,7 @@
static int stk_sensor_outb(struct stk_camera *dev, u8 reg, u8 val)
{
int i = 0;
- int tmpval = 0;
+ u8 tmpval = 0;
if (stk_camera_write_reg(dev, STK_IIC_TX_INDEX, reg))
return 1;
@@ -253,7 +253,7 @@ static int stk_sensor_outb(struct stk_camera *dev, u8 reg, u8 val)
static int stk_sensor_inb(struct stk_camera *dev, u8 reg, u8 *val)
{
int i = 0;
- int tmpval = 0;
+ u8 tmpval = 0;
if (stk_camera_write_reg(dev, STK_IIC_RX_INDEX, reg))
return 1;
@@ -274,7 +274,7 @@ static int stk_sensor_inb(struct stk_camera *dev, u8 reg, u8 *val)
if (stk_camera_read_reg(dev, STK_IIC_RX_VALUE, &tmpval))
return 1;
- *val = (u8) tmpval;
+ *val = tmpval;
return 0;
}
^ permalink raw reply related [flat|nested] 4+ messages in thread