TCM825x: Include invertation of image mirroring in configuration
Subsystems (4)
PATCH 1/3 TCM825x: Include invertation of image mirroring in configuration
Add invertation of image mirroring register bits to default configuration.
This is useful when the camera module is e.g. mounted upside down.
--- drivers/media/video/tcm825x.c | 6 ++++++ drivers/media/video/tcm825x.h | 1 + 2 files changed, 7 insertions(+), 0 deletions(-)
drivers/media/video/tcm825x.c +6 -0
@@ -523,6 +523,9 @@ static int ioctl_g_ctrl(struct v4l2_int_device *s,if (val <0 )return val; +if (vc->id ==V4L2_CID_HFLIP || vc->id ==V4L2_CID_VFLIP ) + val ^= sensor->platform_data->is_upside_down (); + vc->value = val;return 0 ; }
@@ -556,6 +559,9 @@ static int ioctl_s_ctrl(struct v4l2_int_device *s,if (lvc ==NULL )return -EINVAL ; +if (vc->id ==V4L2_CID_HFLIP || vc->id ==V4L2_CID_VFLIP ) + val ^= sensor->platform_data->is_upside_down (); + val = val << lvc->start_bit;if (tcm825x_write_reg_mask (client, lvc->reg, val))return -EIO ;
drivers/media/video/tcm825x.h +1 -0
@@ -182,6 +182,7 @@ struct tcm825x_platform_data {int (*needs_reset)(struct v4l2_int_device *s,void *buf,struct v4l2_pix_format *fmt);int (*ifparm)(struct v4l2_ifparm *p); +int (*is_upside_down)(void ); };/* Array of image sizes supported by TCM825X. These must be ordered from
Signature · 1 line
1.5.0.6
PATCH 2/3 N810: Don't export camera orientation
On Nokia N810 the camera module is mounted upside down. This affects the mirroring controls. This patch inverts the controls for N810.
--- arch/arm/mach-omap2/board-n800-camera.c | 65 +++++++++++++++++++++++++++--- 1 files changed, 58 insertions(+), 7 deletions(-)
arch/arm/mach-omap2/board-n800-camera.c +58 -7
@@ -28,6 +28,8 @@#include <media/v4l2-int-device.h> +#include <asm/mach-types.h> +#include <asm/arch/menelaus.h> #include <asm/arch/gpio.h> #include <asm/arch/board.h>
@@ -71,7 +73,8 @@ static int frames_after_reset;static int saturated_count;#endif -const static struct tcm825x_reg tcm825x_default_regs_[] = { +#ifdef CONFIG_MACH_NOKIA_N800 +const static struct tcm825x_reg tcm825x_regs_n800[] = {/* initial settings for 2.5 V */ {0x00 ,0x03 }, {0x03 ,0x29 }, {0xaa ,0x2a }, {0xc0 ,0x2b }, {0x10, 0x2c}, {0x4c, 0x2d}, {0x9c, 0x3f},
@@ -103,6 +106,42 @@ const static struct tcm825x_reg tcm825x_default_regs_[] = { {0x08, 0x5c}, {0x08, 0x5d}, {0x08, 0x5e}, {0x08, 0x5f}, {TCM825X_VAL_TERM, TCM825X_REG_TERM} }; +#endif + +#ifdef CONFIG_MACH_NOKIA_N810 +const static struct tcm825x_reg tcm825x_regs_n810[] = { + /* initial settings for 2.5 V */ + {0x00, 0x03}, {0x03, 0x29}, {0xaa, 0x2a}, {0xc0, 0x2b}, + {0x10, 0x2c}, {0x4c, 0x2d}, {0x9c, 0x3f}, + + /* main settings */ + {0x00, 0x00}, {0x30, 0x01}, {0x0e, 0x02}, /* initial */ + {0xcf, 0x04}, {0x02, 0x05}, {0x0d, 0x06}, {0xc0, 0x07}, + {0x38, 0x08}, {0x50, 0x09}, {0x80, 0x0a}, {0x40, 0x0b}, + {0x40, 0x0c}, {0x00, 0x0d}, {0x04, 0x0e}, {0x04, 0x0f}, + {0x22, 0x10}, {0x96, 0x11}, {0xf0, 0x12}, {0x08, 0x13}, + {0x08, 0x14}, {0x30, 0x15}, {0x30, 0x16}, {0x01, 0x17}, + {0x40, 0x18}, {0x87, 0x19}, {0x2b, 0x1a}, {0x84, 0x1b}, + {0x52, 0x1c}, {0x44, 0x1d}, {0x68, 0x1e}, {0x00, 0x1f}, + {0x00, 0x20}, {0x01, 0x21}, {0x27, 0x22}, {0x40, 0x23}, + {0x27, 0x24}, {0x5f, 0x25}, {0x00, 0x26}, {0x16, 0x27}, + {0x23, 0x28}, /* initial */ /* initial */ /* initial */ + /* initial */ /* initial */ {0x00, 0x2e}, {0x00, 0x2f}, + {0x00, 0x30}, {0x00, 0x31}, {0x00, 0x32}, {0x00, 0x33}, + {0x00, 0x34}, {0x00, 0x35}, {0x00, 0x36}, {0x00, 0x37}, + {0x00, 0x38}, {0x8c, 0x39}, {0xc8, 0x3A}, {0x80, 0x3b}, + {0x00, 0x3c}, {0x17, 0x3d}, {0x85, 0x3e}, /* initial */ + {0xa0, 0x40}, {0x00, 0x41}, {0x00, 0x42}, {0x00, 0x43}, + {0x08, 0x44}, {0x12, 0x45}, {0x00, 0x46}, {0x20, 0x47}, + {0x30, 0x48}, {0x18, 0x49}, {0x20, 0x4a}, {0x4d, 0x4b}, + {0x0c, 0x4c}, {0xe0, 0x4d}, {0x20, 0x4e}, {0x89, 0x4f}, + {0x21, 0x50}, {0x80, 0x51}, {0x02, 0x52}, {0x00, 0x53}, + {0x30, 0x54}, {0x90, 0x55}, {0x40, 0x56}, {0x06, 0x57}, + {0x0f, 0x58}, {0x23, 0x59}, {0x08, 0x5A}, {0x04, 0x5b}, + {0x08, 0x5c}, {0x08, 0x5d}, {0x08, 0x5e}, {0x08, 0x5f}, + {TCM825X_VAL_TERM, TCM825X_REG_TERM} +}; +#endif static int tcm825x_is_okay(void) {
@@ -182,7 +221,10 @@ static int tcm825x_power_set(int power)static const struct tcm825x_reg *tcm825x_default_regs (void ) { -return tcm825x_default_regs_; +if (machine_is_nokia_n810 ()) +return tcm825x_regs_n810; + +return tcm825x_regs_n800; }#ifdef OMAP24XX_CAMERA_JAM_HACK
@@ -298,12 +340,21 @@ static int tcm825x_ifparm(struct v4l2_ifparm *p)return 0 ; } +static int tcm825x_is_upside_down (void ) +{ +if (machine_is_nokia_n810 ()) +return 1 ; + +return 0 ; +} +const struct tcm825x_platform_data n800_tcm825x_platform_data = { - .is_okay = tcm825x_is_okay, - .power_set = tcm825x_power_set, - .default_regs = tcm825x_default_regs, - .needs_reset = tcm825x_needs_reset, - .ifparm = tcm825x_ifparm, + .is_okay = tcm825x_is_okay, + .power_set = tcm825x_power_set, + .default_regs = tcm825x_default_regs, + .needs_reset = tcm825x_needs_reset, + .ifparm = tcm825x_ifparm, + .is_upside_down = tcm825x_is_upside_down, };void __init n800_cam_init (void )
Signature · 1 line
1.5.0.6
PATCH 3/3 N800: Select tcm825x only if wanted
Don't enable automatically TCM825x on N800 unlessVIDEO_HELPER_CHIPS_AUTO is selected.
--- arch/arm/mach-omap2/Kconfig | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
arch/arm/mach-omap2/Kconfig +1 -1
@@ -35,7 +35,7 @@ config MACH_OMAP_GENERIC config MACH_NOKIA_N800 bool "Nokia N800" depends on ARCH_OMAP2420 - select VIDEO_TCM825X if VIDEO_OMAP2 + select VIDEO_TCM825X if VIDEO_OMAP2 && VIDEO_HELPER_CHIPS_AUTO select CBUS if VIDEO_TCM825X select CBUS_RETU if VIDEO_TCM825X select MENELAUS if VIDEO_TCM825X
Signature · 1 line
1.5.0.6
Re: [PATCH 2/3] N810: Don't export camera orientation
In reply to Sakari AilusQuoted 103 lines · Sakari Ailus
On Nokia N810 the camera module is mounted upside down. This affects the mirroring controls. This patch inverts the controls for N810.
Signed-off-by Sakari Ailus <[email protected]>--- arch/arm/mach-omap2/board-n800-camera.c | 65 +++++++++++++++++++++++++++--- 1 files changed, 58 insertions(+), 7 deletions(-)arch/arm/mach-omap2/board-n800-camera.c +40
-1@@ -28,6 +28,8 @@#include <media/v4l2-int-device.h> +#include <asm/mach-types.h> +#include <asm/arch/menelaus.h> #include <asm/arch/gpio.h> #include <asm/arch/board.h> @@ -71,7 +73,8 @@ static int frames_after_reset;static int saturated_count;#endif -const static struct tcm825x_reg tcm825x_default_regs_[] = { +#ifdef CONFIG_MACH_NOKIA_N800 +const static struct tcm825x_reg tcm825x_regs_n800[] = {/* initial settings for 2.5 V */ {0x00 ,0x03 }, {0x03 ,0x29 }, {0xaa ,0x2a }, {0xc0 ,0x2b }, {0x10, 0x2c}, {0x4c, 0x2d}, {0x9c, 0x3f},@@ -103,6 +106,42 @@ const static struct tcm825x_reg tcm825x_default_regs_[] = { {0x08, 0x5c}, {0x08, 0x5d}, {0x08, 0x5e}, {0x08, 0x5f}, {TCM825X_VAL_TERM, TCM825X_REG_TERM} }; +#endif + +#ifdef CONFIG_MACH_NOKIA_N810 +const static struct tcm825x_reg tcm825x_regs_n810[] = { + /* initial settings for 2.5 V */ + {0x00, 0x03}, {0x03, 0x29}, {0xaa, 0x2a}, {0xc0, 0x2b}, + {0x10, 0x2c}, {0x4c, 0x2d}, {0x9c, 0x3f}, + + /* main settings */ + {0x00, 0x00}, {0x30, 0x01}, {0x0e, 0x02}, /* initial */ + {0xcf, 0x04}, {0x02, 0x05}, {0x0d, 0x06}, {0xc0, 0x07}, + {0x38, 0x08}, {0x50, 0x09}, {0x80, 0x0a}, {0x40, 0x0b}, + {0x40, 0x0c}, {0x00, 0x0d}, {0x04, 0x0e}, {0x04, 0x0f}, + {0x22, 0x10}, {0x96, 0x11}, {0xf0, 0x12}, {0x08, 0x13}, + {0x08, 0x14}, {0x30, 0x15}, {0x30, 0x16}, {0x01, 0x17}, + {0x40, 0x18}, {0x87, 0x19}, {0x2b, 0x1a}, {0x84, 0x1b}, + {0x52, 0x1c}, {0x44, 0x1d}, {0x68, 0x1e}, {0x00, 0x1f}, + {0x00, 0x20}, {0x01, 0x21}, {0x27, 0x22}, {0x40, 0x23}, + {0x27, 0x24}, {0x5f, 0x25}, {0x00, 0x26}, {0x16, 0x27}, + {0x23, 0x28}, /* initial */ /* initial */ /* initial */ + /* initial */ /* initial */ {0x00, 0x2e}, {0x00, 0x2f}, + {0x00, 0x30}, {0x00, 0x31}, {0x00, 0x32}, {0x00, 0x33}, + {0x00, 0x34}, {0x00, 0x35}, {0x00, 0x36}, {0x00, 0x37}, + {0x00, 0x38}, {0x8c, 0x39}, {0xc8, 0x3A}, {0x80, 0x3b}, + {0x00, 0x3c}, {0x17, 0x3d}, {0x85, 0x3e}, /* initial */ + {0xa0, 0x40}, {0x00, 0x41}, {0x00, 0x42}, {0x00, 0x43}, + {0x08, 0x44}, {0x12, 0x45}, {0x00, 0x46}, {0x20, 0x47}, + {0x30, 0x48}, {0x18, 0x49}, {0x20, 0x4a}, {0x4d, 0x4b}, + {0x0c, 0x4c}, {0xe0, 0x4d}, {0x20, 0x4e}, {0x89, 0x4f}, + {0x21, 0x50}, {0x80, 0x51}, {0x02, 0x52}, {0x00, 0x53}, + {0x30, 0x54}, {0x90, 0x55}, {0x40, 0x56}, {0x06, 0x57}, + {0x0f, 0x58}, {0x23, 0x59}, {0x08, 0x5A}, {0x04, 0x5b}, + {0x08, 0x5c}, {0x08, 0x5d}, {0x08, 0x5e}, {0x08, 0x5f}, + {TCM825X_VAL_TERM, TCM825X_REG_TERM} +}; +#endif static int tcm825x_is_okay(void){
arch/arm/mach-omap2/board-n800-camera.c +12
-2@@ -182,7 +221,10 @@ static int tcm825x_power_set(int power)static const struct tcm825x_reg *tcm825x_default_regs (void ) { -return tcm825x_default_regs_; +if (machine_is_nokia_n810 ()) +return tcm825x_regs_n810; + +return tcm825x_regs_n800; }#ifdef OMAP24XX_CAMERA_JAM_HACK @@ -298,12 +340,21 @@ static int tcm825x_ifparm(struct v4l2_ifparm *p)return 0 ; } +static int tcm825x_is_upside_down (void ) +{ +if (machine_is_nokia_n810 ()) +return 1 ; + +return 0 ; +} +const struct tcm825x_platform_data n800_tcm825x_platform_data = { - .is_okay = tcm825x_is_okay,
arch/arm/mach-omap2/board-n800-camera.c static int tcm825x_ifparm(struct v4l2_ifparm *p) · line 357
Quoted 10 lines
arch/arm/mach-omap2/board-n800-camera.c +6
-4- .power_set = tcm825x_power_set, - .default_regs = tcm825x_default_regs, - .needs_reset = tcm825x_needs_reset, - .ifparm = tcm825x_ifparm, + .is_okay = tcm825x_is_okay, + .power_set = tcm825x_power_set, + .default_regs = tcm825x_default_regs, + .needs_reset = tcm825x_needs_reset, + .ifparm = tcm825x_ifparm, + .is_upside_down = tcm825x_is_upside_down,
ok, now i got your point but this could be:
.is_upside_down = machine_is_nokia_n810() ? 1 : 0,
Quoted 10 lines
arch/arm/mach-omap2/board-n800-camera.c +0
-1};void __init n800_cam_init (void ) --1.5.0.6
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Signature · 5 lines
Best Regards, Felipe Balbi http://felipebalbi.com [email protected]
Re: [PATCH 2/3] N810: Don't export camera orientation
ext Felipe Balbi wrote:
Hello Felipe, and thanks for reviewing the patch! :)
Quoted 21 lines
Quoted 19 lines · Sakari Ailus
arch/arm/mach-omap2/board-n800-camera.c +9
-5@@ -298,12 +340,21 @@ static int tcm825x_ifparm(struct v4l2_ifparm *p)return 0 ; } +static int tcm825x_is_upside_down (void ) +{ +if (machine_is_nokia_n810 ()) +return 1 ; + +return 0 ; +} +const struct tcm825x_platform_data n800_tcm825x_platform_data = { - .is_okay = tcm825x_is_okay, - .power_set = tcm825x_power_set, - .default_regs = tcm825x_default_regs, - .needs_reset = tcm825x_needs_reset, - .ifparm = tcm825x_ifparm, + .is_okay = tcm825x_is_okay,
Quoted 8 lines
arch/arm/mach-omap2/board-n800-camera.c static int tcm825x_ifparm(struct v4l2_ifparm *p) · line 357
Quoted 5 lines
arch/arm/mach-omap2/board-n800-camera.c +5
-0+ .power_set = tcm825x_power_set, + .default_regs = tcm825x_default_regs, + .needs_reset = tcm825x_needs_reset, + .ifparm = tcm825x_ifparm, + .is_upside_down = tcm825x_is_upside_down,ok, now i got your point but this could be:
.is_upside_down =machine_is_nokia_n810()? 1 : 0,
This doesn't work because machine_is_nokia_n810() is not constant.
Anyway, tcm825x_is_upside_down can be made more simple as it could just return machine_is_nokia_n810().
I'll send new patches.
Signature · 2 lines
Sakari Ailus [email protected]
PATCH 1/3 TCM825x: Include invertation of image mirroring in configuration
Add invertation of image mirroring register bits to default configuration.
This is useful when the camera module is e.g. mounted upside down.
--- drivers/media/video/tcm825x.c | 6 ++++++ drivers/media/video/tcm825x.h | 1 + 2 files changed, 7 insertions(+), 0 deletions(-)
drivers/media/video/tcm825x.c +6 -0
@@ -523,6 +523,9 @@ static int ioctl_g_ctrl(struct v4l2_int_device *s,if (val <0 )return val; +if (vc->id ==V4L2_CID_HFLIP || vc->id ==V4L2_CID_VFLIP ) + val ^= sensor->platform_data->is_upside_down (); + vc->value = val;return 0 ; }
@@ -556,6 +559,9 @@ static int ioctl_s_ctrl(struct v4l2_int_device *s,if (lvc ==NULL )return -EINVAL ; +if (vc->id ==V4L2_CID_HFLIP || vc->id ==V4L2_CID_VFLIP ) + val ^= sensor->platform_data->is_upside_down (); + val = val << lvc->start_bit;if (tcm825x_write_reg_mask (client, lvc->reg, val))return -EIO ;
drivers/media/video/tcm825x.h +1 -0
@@ -182,6 +182,7 @@ struct tcm825x_platform_data {int (*needs_reset)(struct v4l2_int_device *s,void *buf,struct v4l2_pix_format *fmt);int (*ifparm)(struct v4l2_ifparm *p); +int (*is_upside_down)(void ); };/* Array of image sizes supported by TCM825X. These must be ordered from
Signature · 1 line
1.5.0.6
PATCH 2/3 N810: Don't export camera orientation
On Nokia N810 the camera module is mounted upside down. This affects the mirroring controls. This patch inverts the controls for N810.
--- arch/arm/mach-omap2/board-n800-camera.c | 62 +++++++++++++++++++++++++++--- 1 files changed, 55 insertions(+), 7 deletions(-)
arch/arm/mach-omap2/board-n800-camera.c +55 -7
@@ -28,6 +28,8 @@#include <media/v4l2-int-device.h> +#include <asm/mach-types.h> +#include <asm/arch/menelaus.h> #include <asm/arch/gpio.h> #include <asm/arch/board.h>
@@ -71,7 +73,8 @@ static int frames_after_reset;static int saturated_count;#endif -const static struct tcm825x_reg tcm825x_default_regs_[] = { +#ifdef CONFIG_MACH_NOKIA_N800 +const static struct tcm825x_reg tcm825x_regs_n800[] = {/* initial settings for 2.5 V */ {0x00 ,0x03 }, {0x03 ,0x29 }, {0xaa ,0x2a }, {0xc0 ,0x2b }, {0x10, 0x2c}, {0x4c, 0x2d}, {0x9c, 0x3f},
@@ -103,6 +106,42 @@ const static struct tcm825x_reg tcm825x_default_regs_[] = { {0x08, 0x5c}, {0x08, 0x5d}, {0x08, 0x5e}, {0x08, 0x5f}, {TCM825X_VAL_TERM, TCM825X_REG_TERM} }; +#endif + +#ifdef CONFIG_MACH_NOKIA_N810 +const static struct tcm825x_reg tcm825x_regs_n810[] = { + /* initial settings for 2.5 V */ + {0x00, 0x03}, {0x03, 0x29}, {0xaa, 0x2a}, {0xc0, 0x2b}, + {0x10, 0x2c}, {0x4c, 0x2d}, {0x9c, 0x3f}, + + /* main settings */ + {0x00, 0x00}, {0x30, 0x01}, {0x0e, 0x02}, /* initial */ + {0xcf, 0x04}, {0x02, 0x05}, {0x0d, 0x06}, {0xc0, 0x07}, + {0x38, 0x08}, {0x50, 0x09}, {0x80, 0x0a}, {0x40, 0x0b}, + {0x40, 0x0c}, {0x00, 0x0d}, {0x04, 0x0e}, {0x04, 0x0f}, + {0x22, 0x10}, {0x96, 0x11}, {0xf0, 0x12}, {0x08, 0x13}, + {0x08, 0x14}, {0x30, 0x15}, {0x30, 0x16}, {0x01, 0x17}, + {0x40, 0x18}, {0x87, 0x19}, {0x2b, 0x1a}, {0x84, 0x1b}, + {0x52, 0x1c}, {0x44, 0x1d}, {0x68, 0x1e}, {0x00, 0x1f}, + {0x00, 0x20}, {0x01, 0x21}, {0x27, 0x22}, {0x40, 0x23}, + {0x27, 0x24}, {0x5f, 0x25}, {0x00, 0x26}, {0x16, 0x27}, + {0x23, 0x28}, /* initial */ /* initial */ /* initial */ + /* initial */ /* initial */ {0x00, 0x2e}, {0x00, 0x2f}, + {0x00, 0x30}, {0x00, 0x31}, {0x00, 0x32}, {0x00, 0x33}, + {0x00, 0x34}, {0x00, 0x35}, {0x00, 0x36}, {0x00, 0x37}, + {0x00, 0x38}, {0x8c, 0x39}, {0xc8, 0x3A}, {0x80, 0x3b}, + {0x00, 0x3c}, {0x17, 0x3d}, {0x85, 0x3e}, /* initial */ + {0xa0, 0x40}, {0x00, 0x41}, {0x00, 0x42}, {0x00, 0x43}, + {0x08, 0x44}, {0x12, 0x45}, {0x00, 0x46}, {0x20, 0x47}, + {0x30, 0x48}, {0x18, 0x49}, {0x20, 0x4a}, {0x4d, 0x4b}, + {0x0c, 0x4c}, {0xe0, 0x4d}, {0x20, 0x4e}, {0x89, 0x4f}, + {0x21, 0x50}, {0x80, 0x51}, {0x02, 0x52}, {0x00, 0x53}, + {0x30, 0x54}, {0x90, 0x55}, {0x40, 0x56}, {0x06, 0x57}, + {0x0f, 0x58}, {0x23, 0x59}, {0x08, 0x5A}, {0x04, 0x5b}, + {0x08, 0x5c}, {0x08, 0x5d}, {0x08, 0x5e}, {0x08, 0x5f}, + {TCM825X_VAL_TERM, TCM825X_REG_TERM} +}; +#endif static int tcm825x_is_okay(void) {
@@ -182,7 +221,10 @@ static int tcm825x_power_set(int power)static const struct tcm825x_reg *tcm825x_default_regs (void ) { -return tcm825x_default_regs_; +if (machine_is_nokia_n810 ()) +return tcm825x_regs_n810; + +return tcm825x_regs_n800; }#ifdef OMAP24XX_CAMERA_JAM_HACK
@@ -298,12 +340,18 @@ static int tcm825x_ifparm(struct v4l2_ifparm *p)return 0 ; } +static int tcm825x_is_upside_down (void ) +{ +return machine_is_nokia_n810 (); +} +const struct tcm825x_platform_data n800_tcm825x_platform_data = { - .is_okay = tcm825x_is_okay, - .power_set = tcm825x_power_set, - .default_regs = tcm825x_default_regs, - .needs_reset = tcm825x_needs_reset, - .ifparm = tcm825x_ifparm, + .is_okay = tcm825x_is_okay, + .power_set = tcm825x_power_set, + .default_regs = tcm825x_default_regs, + .needs_reset = tcm825x_needs_reset, + .ifparm = tcm825x_ifparm, + .is_upside_down = tcm825x_is_upside_down, };void __init n800_cam_init (void )
Signature · 1 line
1.5.0.6
PATCH 3/3 N800: Select tcm825x only if wanted
Don't enable automatically TCM825x on N800 unlessVIDEO_HELPER_CHIPS_AUTO is selected.
--- arch/arm/mach-omap2/Kconfig | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
arch/arm/mach-omap2/Kconfig +1 -1
@@ -35,7 +35,7 @@ config MACH_OMAP_GENERIC config MACH_NOKIA_N800 bool "Nokia N800" depends on ARCH_OMAP2420 - select VIDEO_TCM825X if VIDEO_OMAP2 + select VIDEO_TCM825X if VIDEO_OMAP2 && VIDEO_HELPER_CHIPS_AUTO select CBUS if VIDEO_TCM825X select CBUS_RETU if VIDEO_TCM825X select MENELAUS if VIDEO_TCM825X
Signature · 1 line
1.5.0.6
Tony Lindgren
maintainerRe: [PATCH 3/3] N800: Select tcm825x only if wanted
Quoted 2 lines · Sakari Ailus
Don't enable automatically TCM825x on N800 unless
VIDEO_HELPER_CHIPS_AUTOis selected.
Pushing.
Tony
Quoted 25 lines
Signed-off-by Sakari Ailus <[email protected]>--- arch/arm/mach-omap2/Kconfig | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)arch/arm/mach-omap2/Kconfig +1
-1@@ -35,7 +35,7 @@ config MACH_OMAP_GENERIC config MACH_NOKIA_N800 bool "Nokia N800" depends on ARCH_OMAP2420 - select VIDEO_TCM825X if VIDEO_OMAP2 + select VIDEO_TCM825X if VIDEO_OMAP2 && VIDEO_HELPER_CHIPS_AUTO select CBUS if VIDEO_TCM825X select CBUS_RETU if VIDEO_TCM825X select MENELAUS if VIDEO_TCM825XSignature · 6 lines
1.5.0.6 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Tony Lindgren
maintainerRe: [PATCH 2/3] N810: Don't export camera orientation
In reply to Sakari AilusQuoted 2 lines · Sakari Ailus
On Nokia N810 the camera module is mounted upside down. This affects the mirroring controls. This patch inverts the controls for N810.
Pushing.
Tony
Quoted 115 lines
Signed-off-by Sakari Ailus <[email protected]>--- arch/arm/mach-omap2/board-n800-camera.c | 62 +++++++++++++++++++++++++++--- 1 files changed, 55 insertions(+), 7 deletions(-)arch/arm/mach-omap2/board-n800-camera.c +55
-7@@ -28,6 +28,8 @@#include <media/v4l2-int-device.h> +#include <asm/mach-types.h> +#include <asm/arch/menelaus.h> #include <asm/arch/gpio.h> #include <asm/arch/board.h> @@ -71,7 +73,8 @@ static int frames_after_reset;static int saturated_count;#endif -const static struct tcm825x_reg tcm825x_default_regs_[] = { +#ifdef CONFIG_MACH_NOKIA_N800 +const static struct tcm825x_reg tcm825x_regs_n800[] = {/* initial settings for 2.5 V */ {0x00 ,0x03 }, {0x03 ,0x29 }, {0xaa ,0x2a }, {0xc0 ,0x2b }, {0x10, 0x2c}, {0x4c, 0x2d}, {0x9c, 0x3f},@@ -103,6 +106,42 @@ const static struct tcm825x_reg tcm825x_default_regs_[] = { {0x08, 0x5c}, {0x08, 0x5d}, {0x08, 0x5e}, {0x08, 0x5f}, {TCM825X_VAL_TERM, TCM825X_REG_TERM} }; +#endif + +#ifdef CONFIG_MACH_NOKIA_N810 +const static struct tcm825x_reg tcm825x_regs_n810[] = { + /* initial settings for 2.5 V */ + {0x00, 0x03}, {0x03, 0x29}, {0xaa, 0x2a}, {0xc0, 0x2b}, + {0x10, 0x2c}, {0x4c, 0x2d}, {0x9c, 0x3f}, + + /* main settings */ + {0x00, 0x00}, {0x30, 0x01}, {0x0e, 0x02}, /* initial */ + {0xcf, 0x04}, {0x02, 0x05}, {0x0d, 0x06}, {0xc0, 0x07}, + {0x38, 0x08}, {0x50, 0x09}, {0x80, 0x0a}, {0x40, 0x0b}, + {0x40, 0x0c}, {0x00, 0x0d}, {0x04, 0x0e}, {0x04, 0x0f}, + {0x22, 0x10}, {0x96, 0x11}, {0xf0, 0x12}, {0x08, 0x13}, + {0x08, 0x14}, {0x30, 0x15}, {0x30, 0x16}, {0x01, 0x17}, + {0x40, 0x18}, {0x87, 0x19}, {0x2b, 0x1a}, {0x84, 0x1b}, + {0x52, 0x1c}, {0x44, 0x1d}, {0x68, 0x1e}, {0x00, 0x1f}, + {0x00, 0x20}, {0x01, 0x21}, {0x27, 0x22}, {0x40, 0x23}, + {0x27, 0x24}, {0x5f, 0x25}, {0x00, 0x26}, {0x16, 0x27}, + {0x23, 0x28}, /* initial */ /* initial */ /* initial */ + /* initial */ /* initial */ {0x00, 0x2e}, {0x00, 0x2f}, + {0x00, 0x30}, {0x00, 0x31}, {0x00, 0x32}, {0x00, 0x33}, + {0x00, 0x34}, {0x00, 0x35}, {0x00, 0x36}, {0x00, 0x37}, + {0x00, 0x38}, {0x8c, 0x39}, {0xc8, 0x3A}, {0x80, 0x3b}, + {0x00, 0x3c}, {0x17, 0x3d}, {0x85, 0x3e}, /* initial */ + {0xa0, 0x40}, {0x00, 0x41}, {0x00, 0x42}, {0x00, 0x43}, + {0x08, 0x44}, {0x12, 0x45}, {0x00, 0x46}, {0x20, 0x47}, + {0x30, 0x48}, {0x18, 0x49}, {0x20, 0x4a}, {0x4d, 0x4b}, + {0x0c, 0x4c}, {0xe0, 0x4d}, {0x20, 0x4e}, {0x89, 0x4f}, + {0x21, 0x50}, {0x80, 0x51}, {0x02, 0x52}, {0x00, 0x53}, + {0x30, 0x54}, {0x90, 0x55}, {0x40, 0x56}, {0x06, 0x57}, + {0x0f, 0x58}, {0x23, 0x59}, {0x08, 0x5A}, {0x04, 0x5b}, + {0x08, 0x5c}, {0x08, 0x5d}, {0x08, 0x5e}, {0x08, 0x5f}, + {TCM825X_VAL_TERM, TCM825X_REG_TERM} +}; +#endif static int tcm825x_is_okay(void) {@@ -182,7 +221,10 @@ static int tcm825x_power_set(int power)static const struct tcm825x_reg *tcm825x_default_regs (void ) { -return tcm825x_default_regs_; +if (machine_is_nokia_n810 ()) +return tcm825x_regs_n810; + +return tcm825x_regs_n800; }#ifdef OMAP24XX_CAMERA_JAM_HACK @@ -298,12 +340,18 @@ static int tcm825x_ifparm(struct v4l2_ifparm *p)return 0 ; } +static int tcm825x_is_upside_down (void ) +{ +return machine_is_nokia_n810 (); +} +const struct tcm825x_platform_data n800_tcm825x_platform_data = { - .is_okay = tcm825x_is_okay, - .power_set = tcm825x_power_set, - .default_regs = tcm825x_default_regs, - .needs_reset = tcm825x_needs_reset, - .ifparm = tcm825x_ifparm, + .is_okay = tcm825x_is_okay, + .power_set = tcm825x_power_set, + .default_regs = tcm825x_default_regs, + .needs_reset = tcm825x_needs_reset, + .ifparm = tcm825x_ifparm, + .is_upside_down = tcm825x_is_upside_down, };void __init n800_cam_init (void )Signature · 6 lines
1.5.0.6 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Tony Lindgren
maintainerQuoted 4 lines · Sakari Ailus
Add invertation of image mirroring register bits to default configuration.
This is useful when the camera module is e.g. mounted upside down.
Pushing today.
Tony
Quoted 49 lines
Signed-off-by Sakari Ailus <[email protected]>--- drivers/media/video/tcm825x.c | 6 ++++++ drivers/media/video/tcm825x.h | 1 + 2 files changed, 7 insertions(+), 0 deletions(-)drivers/media/video/tcm825x.c +6
-0@@ -523,6 +523,9 @@ static int ioctl_g_ctrl(struct v4l2_int_device *s,if (val <0 )return val; +if (vc->id ==V4L2_CID_HFLIP || vc->id ==V4L2_CID_VFLIP ) + val ^= sensor->platform_data->is_upside_down (); + vc->value = val;return 0 ; }@@ -556,6 +559,9 @@ static int ioctl_s_ctrl(struct v4l2_int_device *s,if (lvc ==NULL )return -EINVAL ; +if (vc->id ==V4L2_CID_HFLIP || vc->id ==V4L2_CID_VFLIP ) + val ^= sensor->platform_data->is_upside_down (); + val = val << lvc->start_bit;if (tcm825x_write_reg_mask (client, lvc->reg, val))return -EIO ;drivers/media/video/tcm825x.h +1
-0@@ -182,6 +182,7 @@ struct tcm825x_platform_data {int (*needs_reset)(struct v4l2_int_device *s,void *buf,struct v4l2_pix_format *fmt);int (*ifparm)(struct v4l2_ifparm *p); +int (*is_upside_down)(void ); };/* Array of image sizes supported by TCM825X. These must be ordered from Signature · 6 lines
1.5.0.6 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 2/3] N810: Don't export camera orientation
In reply to Sakari AilusQuoted 34 lines · Sakari Ailus
ext Felipe Balbi wrote:
Hello Felipe, and thanks for reviewing the patch! :)
Quoted 21 lines
Quoted 19 lines · Sakari Ailus
arch/arm/mach-omap2/board-n800-camera.c +9
-5@@ -298,12 +340,21 @@ static int tcm825x_ifparm(struct v4l2_ifparm *p)return 0 ; } +static int tcm825x_is_upside_down (void ) +{ +if (machine_is_nokia_n810 ()) +return 1 ; + +return 0 ; +} +const struct tcm825x_platform_data n800_tcm825x_platform_data = { - .is_okay = tcm825x_is_okay, - .power_set = tcm825x_power_set, - .default_regs = tcm825x_default_regs, - .needs_reset = tcm825x_needs_reset, - .ifparm = tcm825x_ifparm, + .is_okay = tcm825x_is_okay,Quoted 8 lines
arch/arm/mach-omap2/board-n800-camera.c static int tcm825x_ifparm(struct v4l2_ifparm *p) · line 357
Quoted 5 lines
arch/arm/mach-omap2/board-n800-camera.c +5
-0+ .power_set = tcm825x_power_set, + .default_regs = tcm825x_default_regs, + .needs_reset = tcm825x_needs_reset, + .ifparm = tcm825x_ifparm, + .is_upside_down = tcm825x_is_upside_down,ok, now i got your point but this could be:
.is_upside_down =machine_is_nokia_n810()? 1 : 0,
Quoted 6 lines
This doesn't work because
machine_is_nokia_n810()is not constant.Anyway,
tcm825x_is_upside_downcan be made more simple as it could just returnmachine_is_nokia_n810().I'll send new patches.
Didn't quite get, machine_is_nokia_n810() will always be true when running in n810. Could you clarify a bit :-p
Signature · 5 lines
Best Regards, Felipe Balbi [email protected] http://blog.felipebalbi.com
Re: [PATCH 2/3] N810: Don't export camera orientation
Quoted 37 lines · Felipe Balbi
Quoted 36 lines · Sakari Ailus
ext Felipe Balbi wrote:
Hello Felipe, and thanks for reviewing the patch! :)
Quoted 21 lines
Quoted 19 lines · Sakari Ailus
arch/arm/mach-omap2/board-n800-camera.c +9
-5@@ -298,12 +340,21 @@ static int tcm825x_ifparm(struct v4l2_ifparm *p)return 0 ; } +static int tcm825x_is_upside_down (void ) +{ +if (machine_is_nokia_n810 ()) +return 1 ; + +return 0 ; +} +const struct tcm825x_platform_data n800_tcm825x_platform_data = { - .is_okay = tcm825x_is_okay, - .power_set = tcm825x_power_set, - .default_regs = tcm825x_default_regs, - .needs_reset = tcm825x_needs_reset, - .ifparm = tcm825x_ifparm, + .is_okay = tcm825x_is_okay,Quoted 8 lines
arch/arm/mach-omap2/board-n800-camera.c static int tcm825x_ifparm(struct v4l2_ifparm *p) · line 357
Quoted 5 lines
arch/arm/mach-omap2/board-n800-camera.c +5
-0+ .power_set = tcm825x_power_set, + .default_regs = tcm825x_default_regs, + .needs_reset = tcm825x_needs_reset, + .ifparm = tcm825x_ifparm, + .is_upside_down = tcm825x_is_upside_down,ok, now i got your point but this could be:
.is_upside_down =machine_is_nokia_n810()? 1 : 0,This doesn't work because
machine_is_nokia_n810()is not constant.
Quoted 7 lines
Quoted 4 lines
Anyway,
tcm825x_is_upside_downcan be made more simple as it could just returnmachine_is_nokia_n810().I'll send new patches.
Didn't quite get,
machine_is_nokia_n810()will always be true when running in n810. Could you clarify a bit :-p
It'll *return* true, but C initialisers must be constants. It simply wouldn't compile.
Cheers
Signature · 2 lines
Please do not print this email unless absolutely necessary. Spread environmental awareness.
Re: [PATCH 2/3] N810: Don't export camera orientation
Quoted 41 lines · andrzej zaborowski
Quoted 40 lines · Felipe Balbi
Quoted 39 lines · Sakari Ailus
ext Felipe Balbi wrote:
Hello Felipe, and thanks for reviewing the patch! :)
Quoted 21 lines
Quoted 19 lines · Sakari Ailus
arch/arm/mach-omap2/board-n800-camera.c +9
-5@@ -298,12 +340,21 @@ static int tcm825x_ifparm(struct v4l2_ifparm *p)return 0 ; } +static int tcm825x_is_upside_down (void ) +{ +if (machine_is_nokia_n810 ()) +return 1 ; + +return 0 ; +} +const struct tcm825x_platform_data n800_tcm825x_platform_data = { - .is_okay = tcm825x_is_okay, - .power_set = tcm825x_power_set, - .default_regs = tcm825x_default_regs, - .needs_reset = tcm825x_needs_reset, - .ifparm = tcm825x_ifparm, + .is_okay = tcm825x_is_okay,Quoted 8 lines
arch/arm/mach-omap2/board-n800-camera.c static int tcm825x_ifparm(struct v4l2_ifparm *p) · line 357
Quoted 5 lines
arch/arm/mach-omap2/board-n800-camera.c +5
-0+ .power_set = tcm825x_power_set, + .default_regs = tcm825x_default_regs, + .needs_reset = tcm825x_needs_reset, + .ifparm = tcm825x_ifparm, + .is_upside_down = tcm825x_is_upside_down,ok, now i got your point but this could be:
.is_upside_down =machine_is_nokia_n810()? 1 : 0,This doesn't work because
machine_is_nokia_n810()is not constant.Anyway,
tcm825x_is_upside_downcan be made more simple as it could just returnmachine_is_nokia_n810().
Quoted 7 lines
Quoted 4 lines
Quoted 1 line
I'll send new patches.
Didn't quite get,
machine_is_nokia_n810()will always be true when running in n810. Could you clarify a bit :-pIt'll *return* true, but C initialisers must be constants. It simply wouldn't compile.
and that's why i was using ?:
machine_is_nokia_n810 ? 1 : 0
the same as:
if (machine_is_nokia_n810)
return 1; else return 0;
Quoted 5 lines
Cheers
Signature · 2 lines
Please do not print this email unless absolutely necessary. Spread environmental awareness.
Signature · 5 lines
Best Regards, Felipe Balbi [email protected] http://blog.felipebalbi.com
Re: [PATCH 2/3] N810: Don't export camera orientation
Quoted 47 lines · Felipe Balbi
Quoted 46 lines · andrzej zaborowski
Quoted 44 lines · Felipe Balbi
Quoted 34 lines · Sakari Ailus
ext Felipe Balbi wrote:
Hello Felipe, and thanks for reviewing the patch! :)
Quoted 21 lines
Quoted 19 lines · Sakari Ailus
arch/arm/mach-omap2/board-n800-camera.c +9
-5@@ -298,12 +340,21 @@ static int tcm825x_ifparm(struct v4l2_ifparm *p)return 0 ; } +static int tcm825x_is_upside_down (void ) +{ +if (machine_is_nokia_n810 ()) +return 1 ; + +return 0 ; +} +const struct tcm825x_platform_data n800_tcm825x_platform_data = { - .is_okay = tcm825x_is_okay, - .power_set = tcm825x_power_set, - .default_regs = tcm825x_default_regs, - .needs_reset = tcm825x_needs_reset, - .ifparm = tcm825x_ifparm, + .is_okay = tcm825x_is_okay,Quoted 8 lines
arch/arm/mach-omap2/board-n800-camera.c static int tcm825x_ifparm(struct v4l2_ifparm *p) · line 357
Quoted 5 lines
arch/arm/mach-omap2/board-n800-camera.c +5
-0+ .power_set = tcm825x_power_set, + .default_regs = tcm825x_default_regs, + .needs_reset = tcm825x_needs_reset, + .ifparm = tcm825x_ifparm, + .is_upside_down = tcm825x_is_upside_down,ok, now i got your point but this could be:
.is_upside_down =machine_is_nokia_n810()? 1 : 0,Quoted 6 lines
This doesn't work because
machine_is_nokia_n810()is not constant.Anyway,
tcm825x_is_upside_downcan be made more simple as it could just returnmachine_is_nokia_n810().I'll send new patches.
Didn't quite get,
machine_is_nokia_n810()will always be true when running in n810. Could you clarify a bit :-p
Quoted 8 lines
Quoted 2 lines
It'll *return* true, but C initialisers must be constants. It simply wouldn't compile.
and that's why i was using ?:
machine_is_nokia_n810? 1 : 0
This doesn't change anything - since machine_is_... is not constant, the whole expression is not constant and is a syntax error. The compiler needs to know at compile time whether to store a 0 or a 1 in the initialiser.
Signature · 2 lines
Please do not print this email unless absolutely necessary. Spread environmental awareness.
Re: [PATCH 2/3] N810: Don't export camera orientation
Quoted 4 lines · andrzej zaborowski
This doesn't change anything - since
machine_is_... is not constant, the whole expression is not constant and is a syntax error. The compiler needs to know at compile time whether to store a 0 or a 1 in the initialiser.
ugh, that's true :-p
forget about it.
Signature · 5 lines
Best Regards, Felipe Balbi [email protected] http://blog.felipebalbi.com
Quoted 5 lines · Sakari Ailus
Add invertation of image mirroring register bits to default configuration.
This is useful when the camera module is e.g. mounted upside down.
Review
Quoted 7 lines
Signed-off-by Sakari Ailus <[email protected]>--- drivers/media/video/tcm825x.c | 6 ++++++ drivers/media/video/tcm825x.h | 1 + 2 files changed, 7 insertions(+), 0 deletions(-)(quoted diff) +0
-0
b/drivers/media/video/tcm825x.c
drivers/media/video/tcm825x.c static int ioctl_g_ctrl(struct v4l2_int_device *s, · line 527
Quoted 9 lines
index e57a646..216638e 100644
drivers/media/video/tcm825x.c +2
-0@@ -523,6 +523,9 @@ static int ioctl_g_ctrl(struct v4l2_int_device *s,if (val <0 )return val; +if (vc->id ==V4L2_CID_HFLIP || vc->id ==V4L2_CID_VFLIP ) + val ^= sensor->platform_data->is_upside_down ();
you didnt put any implementation of this function, but i was wondering if bit field would be enough?
Review
Quoted 15 lines
drivers/media/video/tcm825x.c +4
-0+ vc->value = val;return 0 ; }@@ -556,6 +559,9 @@ static int ioctl_s_ctrl(struct v4l2_int_device *s,if (lvc ==NULL )return -EINVAL ; +if (vc->id ==V4L2_CID_HFLIP || vc->id ==V4L2_CID_VFLIP ) + val ^= sensor->platform_data->is_upside_down (); + val = val << lvc->start_bit;if (tcm825x_write_reg_mask (client, lvc->reg, val))return -EIO ;(quoted diff) +0
-0
b/drivers/media/video/tcm825x.h
drivers/media/video/tcm825x.h struct tcm825x_platform_data { · line 188
Quoted 11 lines
index 966765b..770ebac 100644
drivers/media/video/tcm825x.h +1
-0@@ -182,6 +182,7 @@ struct tcm825x_platform_data {int (*needs_reset)(struct v4l2_int_device *s,void *buf,struct v4l2_pix_format *fmt);int (*ifparm)(struct v4l2_ifparm *p); +int (*is_upside_down)(void ); };/* Array of image sizes supported by TCM825X. These must be ordered
from
Quoted 7 lines
--
1.5.0.6--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Signature · 5 lines
Best Regards, Felipe Balbi http://felipebalbi.com [email protected]