* [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration
@ 2008-05-13 16:04 Sakari Ailus
2008-05-13 16:04 ` [PATCH 2/3] N810: Don't export camera orientation Sakari Ailus
2008-05-13 19:53 ` [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration Felipe Balbi
0 siblings, 2 replies; 17+ messages in thread
From: Sakari Ailus @ 2008-05-13 16:04 UTC (permalink / raw)
To: linux-omap
Add invertation of image mirroring register bits to default
configuration.
This is useful when the camera module is e.g. mounted upside down.
Signed-off-by: Sakari Ailus <sakari.ailus@nokia.com>
---
drivers/media/video/tcm825x.c | 6 ++++++
drivers/media/video/tcm825x.h | 1 +
2 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/drivers/media/video/tcm825x.c b/drivers/media/video/tcm825x.c
index e57a646..216638e 100644
--- a/drivers/media/video/tcm825x.c
+++ b/drivers/media/video/tcm825x.c
@@ -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;
diff --git a/drivers/media/video/tcm825x.h b/drivers/media/video/tcm825x.h
index 966765b..770ebac 100644
--- a/drivers/media/video/tcm825x.h
+++ b/drivers/media/video/tcm825x.h
@@ -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
--
1.5.0.6
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 2/3] N810: Don't export camera orientation
2008-05-13 16:04 [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration Sakari Ailus
@ 2008-05-13 16:04 ` Sakari Ailus
2008-05-13 16:04 ` [PATCH 3/3] N800: Select tcm825x only if wanted Sakari Ailus
2008-05-13 20:01 ` [PATCH 2/3] N810: Don't export camera orientation Felipe Balbi
2008-05-13 19:53 ` [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration Felipe Balbi
1 sibling, 2 replies; 17+ messages in thread
From: Sakari Ailus @ 2008-05-13 16:04 UTC (permalink / raw)
To: linux-omap
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 <sakari.ailus@nokia.com>
---
arch/arm/mach-omap2/board-n800-camera.c | 65 +++++++++++++++++++++++++++---
1 files changed, 58 insertions(+), 7 deletions(-)
diff --git a/arch/arm/mach-omap2/board-n800-camera.c b/arch/arm/mach-omap2/board-n800-camera.c
index 19be30d..9c2bead 100644
--- a/arch/arm/mach-omap2/board-n800-camera.c
+++ b/arch/arm/mach-omap2/board-n800-camera.c
@@ -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)
--
1.5.0.6
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 3/3] N800: Select tcm825x only if wanted
2008-05-13 16:04 ` [PATCH 2/3] N810: Don't export camera orientation Sakari Ailus
@ 2008-05-13 16:04 ` Sakari Ailus
2008-05-13 20:01 ` [PATCH 2/3] N810: Don't export camera orientation Felipe Balbi
1 sibling, 0 replies; 17+ messages in thread
From: Sakari Ailus @ 2008-05-13 16:04 UTC (permalink / raw)
To: linux-omap
Don't enable automatically TCM825x on N800 unless
VIDEO_HELPER_CHIPS_AUTO is selected.
Signed-off-by: Sakari Ailus <sakari.ailus@nokia.com>
---
arch/arm/mach-omap2/Kconfig | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index 5c229cc..94beff0 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -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
--
1.5.0.6
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration
2008-05-13 16:04 [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration Sakari Ailus
2008-05-13 16:04 ` [PATCH 2/3] N810: Don't export camera orientation Sakari Ailus
@ 2008-05-13 19:53 ` Felipe Balbi
1 sibling, 0 replies; 17+ messages in thread
From: Felipe Balbi @ 2008-05-13 19:53 UTC (permalink / raw)
To: Sakari Ailus; +Cc: linux-omap
On Tue, 13 May 2008 19:04:21 +0300, Sakari Ailus <sakari.ailus@nokia.com>
wrote:
> Add invertation of image mirroring register bits to default
> configuration.
>
> This is useful when the camera module is e.g. mounted upside down.
>
> Signed-off-by: Sakari Ailus <sakari.ailus@nokia.com>
> ---
> drivers/media/video/tcm825x.c | 6 ++++++
> drivers/media/video/tcm825x.h | 1 +
> 2 files changed, 7 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/media/video/tcm825x.c
b/drivers/media/video/tcm825x.c
> index e57a646..216638e 100644
> --- a/drivers/media/video/tcm825x.c
> +++ b/drivers/media/video/tcm825x.c
> @@ -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?
> +
> 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;
> diff --git a/drivers/media/video/tcm825x.h
b/drivers/media/video/tcm825x.h
> index 966765b..770ebac 100644
> --- a/drivers/media/video/tcm825x.h
> +++ b/drivers/media/video/tcm825x.h
> @@ -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
> --
> 1.5.0.6
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Best Regards,
Felipe Balbi
http://felipebalbi.com
me@felipebalbi.com
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/3] N810: Don't export camera orientation
2008-05-13 16:04 ` [PATCH 2/3] N810: Don't export camera orientation Sakari Ailus
2008-05-13 16:04 ` [PATCH 3/3] N800: Select tcm825x only if wanted Sakari Ailus
@ 2008-05-13 20:01 ` Felipe Balbi
2008-05-14 12:04 ` Sakari Ailus
1 sibling, 1 reply; 17+ messages in thread
From: Felipe Balbi @ 2008-05-13 20:01 UTC (permalink / raw)
To: Sakari Ailus; +Cc: linux-omap
On Tue, 13 May 2008 19:04:22 +0300, Sakari Ailus <sakari.ailus@nokia.com>
wrote:
> 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 <sakari.ailus@nokia.com>
> ---
> arch/arm/mach-omap2/board-n800-camera.c | 65
> +++++++++++++++++++++++++++---
> 1 files changed, 58 insertions(+), 7 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/board-n800-camera.c
> b/arch/arm/mach-omap2/board-n800-camera.c
> index 19be30d..9c2bead 100644
> --- a/arch/arm/mach-omap2/board-n800-camera.c
> +++ b/arch/arm/mach-omap2/board-n800-camera.c
> @@ -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,
ok, now i got your point but this could be:
.is_upside_down = machine_is_nokia_n810() ? 1 : 0,
> };
>
> 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 majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Best Regards,
Felipe Balbi
http://felipebalbi.com
me@felipebalbi.com
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/3] N810: Don't export camera orientation
2008-05-13 20:01 ` [PATCH 2/3] N810: Don't export camera orientation Felipe Balbi
@ 2008-05-14 12:04 ` Sakari Ailus
2008-05-14 12:05 ` [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration Sakari Ailus
2008-05-14 22:58 ` [PATCH 2/3] N810: Don't export camera orientation Felipe Balbi
0 siblings, 2 replies; 17+ messages in thread
From: Sakari Ailus @ 2008-05-14 12:04 UTC (permalink / raw)
To: ext Felipe Balbi; +Cc: linux-omap
ext Felipe Balbi wrote:
Hello Felipe, and thanks for reviewing the patch! :)
> On Tue, 13 May 2008 19:04:22 +0300, Sakari Ailus <sakari.ailus@nokia.com>
> wrote:
>> @@ -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,
>
> 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.
--
Sakari Ailus
sakari.ailus@nokia.com
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration
2008-05-14 12:04 ` Sakari Ailus
@ 2008-05-14 12:05 ` Sakari Ailus
2008-05-14 12:05 ` [PATCH 2/3] N810: Don't export camera orientation Sakari Ailus
2008-05-16 17:42 ` [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration Tony Lindgren
2008-05-14 22:58 ` [PATCH 2/3] N810: Don't export camera orientation Felipe Balbi
1 sibling, 2 replies; 17+ messages in thread
From: Sakari Ailus @ 2008-05-14 12:05 UTC (permalink / raw)
To: linux-omap
Add invertation of image mirroring register bits to default
configuration.
This is useful when the camera module is e.g. mounted upside down.
Signed-off-by: Sakari Ailus <sakari.ailus@nokia.com>
---
drivers/media/video/tcm825x.c | 6 ++++++
drivers/media/video/tcm825x.h | 1 +
2 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/drivers/media/video/tcm825x.c b/drivers/media/video/tcm825x.c
index e57a646..216638e 100644
--- a/drivers/media/video/tcm825x.c
+++ b/drivers/media/video/tcm825x.c
@@ -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;
diff --git a/drivers/media/video/tcm825x.h b/drivers/media/video/tcm825x.h
index 966765b..770ebac 100644
--- a/drivers/media/video/tcm825x.h
+++ b/drivers/media/video/tcm825x.h
@@ -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
--
1.5.0.6
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 2/3] N810: Don't export camera orientation
2008-05-14 12:05 ` [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration Sakari Ailus
@ 2008-05-14 12:05 ` Sakari Ailus
2008-05-14 12:05 ` [PATCH 3/3] N800: Select tcm825x only if wanted Sakari Ailus
2008-05-16 17:44 ` [PATCH 2/3] N810: Don't export camera orientation Tony Lindgren
2008-05-16 17:42 ` [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration Tony Lindgren
1 sibling, 2 replies; 17+ messages in thread
From: Sakari Ailus @ 2008-05-14 12:05 UTC (permalink / raw)
To: linux-omap
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 <sakari.ailus@nokia.com>
---
arch/arm/mach-omap2/board-n800-camera.c | 62 +++++++++++++++++++++++++++---
1 files changed, 55 insertions(+), 7 deletions(-)
diff --git a/arch/arm/mach-omap2/board-n800-camera.c b/arch/arm/mach-omap2/board-n800-camera.c
index 19be30d..b525125 100644
--- a/arch/arm/mach-omap2/board-n800-camera.c
+++ b/arch/arm/mach-omap2/board-n800-camera.c
@@ -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)
--
1.5.0.6
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 3/3] N800: Select tcm825x only if wanted
2008-05-14 12:05 ` [PATCH 2/3] N810: Don't export camera orientation Sakari Ailus
@ 2008-05-14 12:05 ` Sakari Ailus
2008-05-16 17:44 ` Tony Lindgren
2008-05-16 17:44 ` [PATCH 2/3] N810: Don't export camera orientation Tony Lindgren
1 sibling, 1 reply; 17+ messages in thread
From: Sakari Ailus @ 2008-05-14 12:05 UTC (permalink / raw)
To: linux-omap
Don't enable automatically TCM825x on N800 unless
VIDEO_HELPER_CHIPS_AUTO is selected.
Signed-off-by: Sakari Ailus <sakari.ailus@nokia.com>
---
arch/arm/mach-omap2/Kconfig | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index 5c229cc..94beff0 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -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
--
1.5.0.6
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH 2/3] N810: Don't export camera orientation
2008-05-14 12:04 ` Sakari Ailus
2008-05-14 12:05 ` [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration Sakari Ailus
@ 2008-05-14 22:58 ` Felipe Balbi
2008-05-15 6:54 ` andrzej zaborowski
1 sibling, 1 reply; 17+ messages in thread
From: Felipe Balbi @ 2008-05-14 22:58 UTC (permalink / raw)
To: Sakari Ailus; +Cc: ext Felipe Balbi, linux-omap
On Wed, May 14, 2008 at 03:04:37PM +0300, Sakari Ailus wrote:
> ext Felipe Balbi wrote:
>
> Hello Felipe, and thanks for reviewing the patch! :)
>
>> On Tue, 13 May 2008 19:04:22 +0300, Sakari Ailus <sakari.ailus@nokia.com>
>> wrote:
>>> @@ -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,
>>
>> 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.
Didn't quite get, machine_is_nokia_n810() will always be true when
running in n810. Could you clarify a bit :-p
--
Best Regards,
Felipe Balbi
me@felipebalbi.com
http://blog.felipebalbi.com
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/3] N810: Don't export camera orientation
2008-05-14 22:58 ` [PATCH 2/3] N810: Don't export camera orientation Felipe Balbi
@ 2008-05-15 6:54 ` andrzej zaborowski
2008-05-15 7:57 ` Felipe Balbi
0 siblings, 1 reply; 17+ messages in thread
From: andrzej zaborowski @ 2008-05-15 6:54 UTC (permalink / raw)
To: me; +Cc: Sakari Ailus, linux-omap
On 15/05/2008, Felipe Balbi <me@felipebalbi.com> wrote:
> On Wed, May 14, 2008 at 03:04:37PM +0300, Sakari Ailus wrote:
> > ext Felipe Balbi wrote:
> >
> > Hello Felipe, and thanks for reviewing the patch! :)
> >
> >> On Tue, 13 May 2008 19:04:22 +0300, Sakari Ailus <sakari.ailus@nokia.com>
> >> wrote:
> >>> @@ -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,
> >>
> >> 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.
>
> 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
--
Please do not print this email unless absolutely necessary. Spread
environmental awareness.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/3] N810: Don't export camera orientation
2008-05-15 6:54 ` andrzej zaborowski
@ 2008-05-15 7:57 ` Felipe Balbi
2008-05-15 8:11 ` andrzej zaborowski
0 siblings, 1 reply; 17+ messages in thread
From: Felipe Balbi @ 2008-05-15 7:57 UTC (permalink / raw)
To: andrzej zaborowski; +Cc: me, Sakari Ailus, linux-omap
On Thu, May 15, 2008 at 08:54:34AM +0200, andrzej zaborowski wrote:
> On 15/05/2008, Felipe Balbi <me@felipebalbi.com> wrote:
> > On Wed, May 14, 2008 at 03:04:37PM +0300, Sakari Ailus wrote:
> > > ext Felipe Balbi wrote:
> > >
> > > Hello Felipe, and thanks for reviewing the patch! :)
> > >
> > >> On Tue, 13 May 2008 19:04:22 +0300, Sakari Ailus <sakari.ailus@nokia.com>
> > >> wrote:
> > >>> @@ -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,
> > >>
> > >> 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.
> >
> > 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.
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;
>
> Cheers
> --
> Please do not print this email unless absolutely necessary. Spread
> environmental awareness.
--
Best Regards,
Felipe Balbi
me@felipebalbi.com
http://blog.felipebalbi.com
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/3] N810: Don't export camera orientation
2008-05-15 7:57 ` Felipe Balbi
@ 2008-05-15 8:11 ` andrzej zaborowski
2008-05-15 8:17 ` Felipe Balbi
0 siblings, 1 reply; 17+ messages in thread
From: andrzej zaborowski @ 2008-05-15 8:11 UTC (permalink / raw)
To: me; +Cc: Sakari Ailus, linux-omap
On 15/05/2008, Felipe Balbi <me@felipebalbi.com> wrote:
> On Thu, May 15, 2008 at 08:54:34AM +0200, andrzej zaborowski wrote:
> > On 15/05/2008, Felipe Balbi <me@felipebalbi.com> wrote:
> > > On Wed, May 14, 2008 at 03:04:37PM +0300, Sakari Ailus wrote:
> > > > ext Felipe Balbi wrote:
> > > >
> > > > Hello Felipe, and thanks for reviewing the patch! :)
> > > >
> > > >> On Tue, 13 May 2008 19:04:22 +0300, Sakari Ailus <sakari.ailus@nokia.com>
> > > >> wrote:
> > > >>> @@ -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,
> > > >>
> > > >> 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.
> > >
> > > 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.
>
>
> 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.
--
Please do not print this email unless absolutely necessary. Spread
environmental awareness.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/3] N810: Don't export camera orientation
2008-05-15 8:11 ` andrzej zaborowski
@ 2008-05-15 8:17 ` Felipe Balbi
0 siblings, 0 replies; 17+ messages in thread
From: Felipe Balbi @ 2008-05-15 8:17 UTC (permalink / raw)
To: andrzej zaborowski; +Cc: me, Sakari Ailus, linux-omap
On Thu, May 15, 2008 at 10:11:59AM +0200, andrzej zaborowski wrote:
> 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.
--
Best Regards,
Felipe Balbi
me@felipebalbi.com
http://blog.felipebalbi.com
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration
2008-05-14 12:05 ` [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration Sakari Ailus
2008-05-14 12:05 ` [PATCH 2/3] N810: Don't export camera orientation Sakari Ailus
@ 2008-05-16 17:42 ` Tony Lindgren
1 sibling, 0 replies; 17+ messages in thread
From: Tony Lindgren @ 2008-05-16 17:42 UTC (permalink / raw)
To: Sakari Ailus; +Cc: linux-omap
* Sakari Ailus <sakari.ailus@nokia.com> [080514 06:37]:
> 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
> Signed-off-by: Sakari Ailus <sakari.ailus@nokia.com>
> ---
> drivers/media/video/tcm825x.c | 6 ++++++
> drivers/media/video/tcm825x.h | 1 +
> 2 files changed, 7 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/media/video/tcm825x.c b/drivers/media/video/tcm825x.c
> index e57a646..216638e 100644
> --- a/drivers/media/video/tcm825x.c
> +++ b/drivers/media/video/tcm825x.c
> @@ -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;
> diff --git a/drivers/media/video/tcm825x.h b/drivers/media/video/tcm825x.h
> index 966765b..770ebac 100644
> --- a/drivers/media/video/tcm825x.h
> +++ b/drivers/media/video/tcm825x.h
> @@ -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
> --
> 1.5.0.6
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/3] N810: Don't export camera orientation
2008-05-14 12:05 ` [PATCH 2/3] N810: Don't export camera orientation Sakari Ailus
2008-05-14 12:05 ` [PATCH 3/3] N800: Select tcm825x only if wanted Sakari Ailus
@ 2008-05-16 17:44 ` Tony Lindgren
1 sibling, 0 replies; 17+ messages in thread
From: Tony Lindgren @ 2008-05-16 17:44 UTC (permalink / raw)
To: Sakari Ailus; +Cc: linux-omap
* Sakari Ailus <sakari.ailus@nokia.com> [080514 06:37]:
> On Nokia N810 the camera module is mounted upside down. This affects
> the mirroring controls. This patch inverts the controls for N810.
Pushing.
Tony
>
> Signed-off-by: Sakari Ailus <sakari.ailus@nokia.com>
> ---
> arch/arm/mach-omap2/board-n800-camera.c | 62 +++++++++++++++++++++++++++---
> 1 files changed, 55 insertions(+), 7 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/board-n800-camera.c b/arch/arm/mach-omap2/board-n800-camera.c
> index 19be30d..b525125 100644
> --- a/arch/arm/mach-omap2/board-n800-camera.c
> +++ b/arch/arm/mach-omap2/board-n800-camera.c
> @@ -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)
> --
> 1.5.0.6
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 3/3] N800: Select tcm825x only if wanted
2008-05-14 12:05 ` [PATCH 3/3] N800: Select tcm825x only if wanted Sakari Ailus
@ 2008-05-16 17:44 ` Tony Lindgren
0 siblings, 0 replies; 17+ messages in thread
From: Tony Lindgren @ 2008-05-16 17:44 UTC (permalink / raw)
To: Sakari Ailus; +Cc: linux-omap
* Sakari Ailus <sakari.ailus@nokia.com> [080514 06:36]:
> Don't enable automatically TCM825x on N800 unless
> VIDEO_HELPER_CHIPS_AUTO is selected.
Pushing.
Tony
> Signed-off-by: Sakari Ailus <sakari.ailus@nokia.com>
> ---
> arch/arm/mach-omap2/Kconfig | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
> index 5c229cc..94beff0 100644
> --- a/arch/arm/mach-omap2/Kconfig
> +++ b/arch/arm/mach-omap2/Kconfig
> @@ -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
> --
> 1.5.0.6
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2008-05-16 17:44 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-13 16:04 [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration Sakari Ailus
2008-05-13 16:04 ` [PATCH 2/3] N810: Don't export camera orientation Sakari Ailus
2008-05-13 16:04 ` [PATCH 3/3] N800: Select tcm825x only if wanted Sakari Ailus
2008-05-13 20:01 ` [PATCH 2/3] N810: Don't export camera orientation Felipe Balbi
2008-05-14 12:04 ` Sakari Ailus
2008-05-14 12:05 ` [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration Sakari Ailus
2008-05-14 12:05 ` [PATCH 2/3] N810: Don't export camera orientation Sakari Ailus
2008-05-14 12:05 ` [PATCH 3/3] N800: Select tcm825x only if wanted Sakari Ailus
2008-05-16 17:44 ` Tony Lindgren
2008-05-16 17:44 ` [PATCH 2/3] N810: Don't export camera orientation Tony Lindgren
2008-05-16 17:42 ` [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration Tony Lindgren
2008-05-14 22:58 ` [PATCH 2/3] N810: Don't export camera orientation Felipe Balbi
2008-05-15 6:54 ` andrzej zaborowski
2008-05-15 7:57 ` Felipe Balbi
2008-05-15 8:11 ` andrzej zaborowski
2008-05-15 8:17 ` Felipe Balbi
2008-05-13 19:53 ` [PATCH 1/3] TCM825x: Include invertation of image mirroring in configuration Felipe Balbi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox