* [PATCH v3 0/6] OMAP: omap_device cleanup before device-tree integration
From: Kevin Hilman @ 2011-09-27 21:32 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317143886-13285-1-git-send-email-b-cousson@ti.com>
Benoit Cousson <b-cousson@ti.com> writes:
> Hi Kevin,
>
> Here are a couple of cleanups on top of your for_3.2/omap_device branch.
>
> patches are available here:
> git://gitorious.org/omap-pm/linux.git for_3.2/1_omap_device_cleanup
Thanks, this series looks good now. Queuing for v3.2 here:
git://github.com/khilman/linux-omap-pm.git for_3.2/omap_device-2
Kevin
^ permalink raw reply
* [PATCH] dma/imx-sdma+imx-dma: explicitly #include <linux/module.h>
From: Paul Gortmaker @ 2011-09-27 22:03 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317018379-8897-1-git-send-email-u.kleine-koenig@pengutronix.de>
On 11-09-26 02:26 AM, Uwe Kleine-K?nig wrote:
> This is needed after commit
>
> include: replace linux/module.h with "struct module" wherever possible
>
> (currently 25215aa in next).
>
> Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
> Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig@pengutronix.de>
> ---
> Hello,
>
> maybe it's sensible for Paul to take that before his commit?
Thanks, I'll blend it into the commit adding module.h to the other
drivers/dma files. It seems the imx boards don't have a defconfig
in the arch/arm/configs that enables this (CONFIG_IMX_[S]DMA).
What is really interesting (at least to me anyway) is that I
didn't get one iMX build in some 6000+ ARM randconfig builds....
I would have thought it would have showed up at least a couple
times, given that number of builds. Maybe randconfig doesn't
deal so well with "choice" Kconfig items?
~/git/module.h/linux-2.6.git$ ls -1 ../build-10*arm |wc -l
6399
~/git/module.h/linux-2.6.git$ grep CONFIG_ARCH_[A-Z0-9]*=y ../build-10*arm*/.config | sed 's/.*CON/CON/'|sort |uniq
CONFIG_ARCH_EBSA110=y
CONFIG_ARCH_H7201=y
CONFIG_ARCH_H7202=y
CONFIG_ARCH_H720X=y
CONFIG_ARCH_VERSATILE=y
~/git/module.h/linux-2.6.git$
No ARCH_MXC, no ARCH_MXS, PXA, or any of the other 20+ variants.
Definitely not a random spread there, with all 6000 builds falling
in just 5 buckets.
Paul.
>
> Best regards
> Uwe
>
> drivers/dma/imx-dma.c | 1 +
> drivers/dma/imx-sdma.c | 1 +
> 2 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/dma/imx-dma.c b/drivers/dma/imx-dma.c
> index d99f71c..3732de8 100644
> --- a/drivers/dma/imx-dma.c
> +++ b/drivers/dma/imx-dma.c
> @@ -23,6 +23,7 @@
> #include <linux/slab.h>
> #include <linux/platform_device.h>
> #include <linux/dmaengine.h>
> +#include <linux/module.h>
>
> #include <asm/irq.h>
> #include <mach/dma-v1.h>
> diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
> index b5cc27d..86fb6e5 100644
> --- a/drivers/dma/imx-sdma.c
> +++ b/drivers/dma/imx-sdma.c
> @@ -34,6 +34,7 @@
> #include <linux/dmaengine.h>
> #include <linux/of.h>
> #include <linux/of_device.h>
> +#include <linux/module.h>
>
> #include <asm/irq.h>
> #include <mach/sdma.h>
^ permalink raw reply
* [RFC PATCH v3] drivercore: Add driver probe deferral mechanism
From: Mark Brown @ 2011-09-27 22:13 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20110927210849.GD3994@ponder.secretlab.ca>
On Tue, Sep 27, 2011 at 03:08:49PM -0600, Grant Likely wrote:
> Okay, will do. How does EPROBE_DEFER 518 sound?
Note that I'm not sure this answers the issue I was raising - the issue
isn't that the caller doesn't know what the error code means, the issue
is that in some cases the driver needs to take a decision about what
failure to get a resource means. Does it mean that the driver can work
fine and be slightly less featureful or should it cause a deferral?
^ permalink raw reply
* [PATCH 4/8] ispvideo: Add support for G/S/ENUM_STD ioctl
From: Mauro Carvalho Chehab @ 2011-09-27 22:31 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <19F8576C6E063C45BE387C64729E739404EC8113E2@dbde02.ent.ti.com>
Em 19-09-2011 12:31, Hiremath, Vaibhav escreveu:
>
>> -----Original Message-----
>> From: Laurent Pinchart [mailto:laurent.pinchart at ideasonboard.com]
>> Sent: Friday, September 16, 2011 6:36 PM
>> To: Ravi, Deepthy
>> Cc: linux-media at vger.kernel.org; tony at atomide.com; linux at arm.linux.org.uk;
>> linux-omap at vger.kernel.org; linux-arm-kernel at lists.infradead.org; linux-
>> kernel at vger.kernel.org; mchehab at infradead.org; g.liakhovetski at gmx.de;
>> Hiremath, Vaibhav
>> Subject: Re: [PATCH 4/8] ispvideo: Add support for G/S/ENUM_STD ioctl
>>
>> Hi Deepthy,
>>
>> On Friday 16 September 2011 15:00:53 Ravi, Deepthy wrote:
>>> On Thursday, September 08, 2011 10:51 PM Laurent Pinchart wrote:
>>>> On Thursday 08 September 2011 15:35:22 Deepthy Ravi wrote:
>>>>> From: Vaibhav Hiremath <hvaibhav@ti.com>
>>>>>
>>>>> In order to support TVP5146 (for that matter any video decoder),
>>>>> it is important to support G/S/ENUM_STD ioctl on /dev/videoX
>>>>> device node.
>>>>
>>>> Why so ? Shouldn't it be queried on the subdev output pad directly ?
>>>
>>> Because standard v4l2 application for analog devices will call these std
>>> ioctls on the streaming device node. So it's done on /dev/video to make
>> the
>>> existing apllication work.
>>
>> Existing applications can't work with the OMAP3 ISP (and similar complex
>> embedded devices) without userspace support anyway, either in the form of
>> a
>> GStreamer element or a libv4l plugin. I still believe that analog video
>> standard operations should be added to the subdev pad operations and
>> exposed
>> through subdev device nodes, exactly as done with formats.
>>
> [Hiremath, Vaibhav] Laurent,
>
> I completely agree with your point that, existing application will not work without setting links properly.
> But I believe the assumption here is, media-controller should set the links (along with pad formants) and
> all existing application should work as is. Isn't it?
Yes.
> The way it is being done currently is, set the format at the pad level which is same as analog standard resolution and use existing application for streaming...
Yes.
> I am ok, if we add s/g/enum_std api support at sub-dev level but this should also be supported on streaming device node.
Agreed. Standards selection should be done at device node, just like any other
device.
Regards,
Mauro
^ permalink raw reply
* [PATCH 4/8] ispvideo: Add support for G/S/ENUM_STD ioctl
From: Gary Thomas @ 2011-09-27 22:49 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <4E824EC4.20305@infradead.org>
On 2011-09-27 16:31, Mauro Carvalho Chehab wrote:
> Em 19-09-2011 12:31, Hiremath, Vaibhav escreveu:
>>
>>> -----Original Message-----
>>> From: Laurent Pinchart [mailto:laurent.pinchart at ideasonboard.com]
>>> Sent: Friday, September 16, 2011 6:36 PM
>>> To: Ravi, Deepthy
>>> Cc: linux-media at vger.kernel.org; tony at atomide.com; linux at arm.linux.org.uk;
>>> linux-omap at vger.kernel.org; linux-arm-kernel at lists.infradead.org; linux-
>>> kernel at vger.kernel.org; mchehab at infradead.org; g.liakhovetski at gmx.de;
>>> Hiremath, Vaibhav
>>> Subject: Re: [PATCH 4/8] ispvideo: Add support for G/S/ENUM_STD ioctl
>>>
>>> Hi Deepthy,
>>>
>>> On Friday 16 September 2011 15:00:53 Ravi, Deepthy wrote:
>>>> On Thursday, September 08, 2011 10:51 PM Laurent Pinchart wrote:
>>>>> On Thursday 08 September 2011 15:35:22 Deepthy Ravi wrote:
>>>>>> From: Vaibhav Hiremath<hvaibhav@ti.com>
>>>>>>
>>>>>> In order to support TVP5146 (for that matter any video decoder),
>>>>>> it is important to support G/S/ENUM_STD ioctl on /dev/videoX
>>>>>> device node.
>>>>>
>>>>> Why so ? Shouldn't it be queried on the subdev output pad directly ?
>>>>
>>>> Because standard v4l2 application for analog devices will call these std
>>>> ioctls on the streaming device node. So it's done on /dev/video to make
>>> the
>>>> existing apllication work.
>>>
>>> Existing applications can't work with the OMAP3 ISP (and similar complex
>>> embedded devices) without userspace support anyway, either in the form of
>>> a
>>> GStreamer element or a libv4l plugin. I still believe that analog video
>>> standard operations should be added to the subdev pad operations and
>>> exposed
>>> through subdev device nodes, exactly as done with formats.
>>>
>> [Hiremath, Vaibhav] Laurent,
>>
>> I completely agree with your point that, existing application will not work without setting links properly.
>> But I believe the assumption here is, media-controller should set the links (along with pad formants) and
>> all existing application should work as is. Isn't it?
>
> Yes.
>
>> The way it is being done currently is, set the format at the pad level which is same as analog standard resolution and use existing application for streaming...
>
> Yes.
>
>> I am ok, if we add s/g/enum_std api support at sub-dev level but this should also be supported on streaming device node.
>
> Agreed. Standards selection should be done at device node, just like any other
> device.
So how do you handle a part like the TVP5150 that is standard agnostic?
That device can sense the standard from the input signal and sets the
result appropriately.
--
------------------------------------------------------------
Gary Thomas | Consulting for the
MLB Associates | Embedded world
------------------------------------------------------------
^ permalink raw reply
* [PATCH v2 2/5] [media] v4l: Add support for mt9t111 sensor driver
From: Guennadi Liakhovetski @ 2011-09-27 23:30 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317130848-21136-3-git-send-email-deepthy.ravi@ti.com>
Hi Deepthy
(personally, I don't think this long CC list is justified, you might want
to drop most of them on the next round, but it's up to you eventually)
Nice, that you managed to re-use the existing mt9t112 driver and extend it
to work outside of soc-camera and with mt9t111 on omap3. See comments
below.
On Tue, 27 Sep 2011, Deepthy Ravi wrote:
> Added support for mt9t111 sensor in the existing
> mt9t112 driver. Also added support for media controller
> framework. The sensor driver currently supports only
> VGA resolution.
I think we should support same resolutions on mt9t111 as what is supported
on mt9t112.
>
> Signed-off-by: Deepthy Ravi <deepthy.ravi@ti.com>
> ---
> drivers/media/video/Kconfig | 7 +
> drivers/media/video/Makefile | 1 +
> drivers/media/video/mt9t111_reg.h | 1367 +++++++++++++++++++++++++++++++++++++
> drivers/media/video/mt9t112.c | 320 ++++++++-
> include/media/mt9t111.h | 45 ++
> 5 files changed, 1704 insertions(+), 36 deletions(-)
> create mode 100644 drivers/media/video/mt9t111_reg.h
> create mode 100644 include/media/mt9t111.h
>
> diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
> index 14326d7..b5806e8 100644
> --- a/drivers/media/video/Kconfig
> +++ b/drivers/media/video/Kconfig
> @@ -482,6 +482,13 @@ config VIDEO_MT9V032
> This is a Video4Linux2 sensor-level driver for the Micron
> MT9V032 752x480 CMOS sensor.
>
> +config VIDEO_MT9T111
> + tristate "Aptina MT9T111 VGA CMOS IMAGE SENSOR"
> + depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API
> + ---help---
> + This is a Video4Linux2 sensor-level driver for the Aptina MT9T111
> + image sensor.
> +
This is not needed, just add a note to the MT9T112 entry saying, that
mt9t111 is supported too, and remove dependency on soc-camera, add
VIDEO_V4L2 instead. VIDEO_V4L2_SUBDEV_API shouldn't be required.
> config VIDEO_TCM825X
> tristate "TCM825x camera sensor support"
> depends on I2C && VIDEO_V4L2
> diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
> index c06f515..02a8b70 100644
> --- a/drivers/media/video/Makefile
> +++ b/drivers/media/video/Makefile
> @@ -68,6 +68,7 @@ obj-$(CONFIG_VIDEO_TVEEPROM) += tveeprom.o
> obj-$(CONFIG_VIDEO_MT9V011) += mt9v011.o
> obj-$(CONFIG_VIDEO_MT9V032) += mt9v032.o
> obj-$(CONFIG_VIDEO_SR030PC30) += sr030pc30.o
> +obj-$(CONFIG_VIDEO_MT9T111) += mt9t112.o
unneeded
> obj-$(CONFIG_VIDEO_NOON010PC30) += noon010pc30.o
> obj-$(CONFIG_VIDEO_M5MOLS) += m5mols/
> obj-$(CONFIG_VIDEO_ADP1653) += adp1653.o
> diff --git a/drivers/media/video/mt9t111_reg.h b/drivers/media/video/mt9t111_reg.h
> new file mode 100644
> index 0000000..2f610d4
> --- /dev/null
> +++ b/drivers/media/video/mt9t111_reg.h
> @@ -0,0 +1,1367 @@
> +/*
> + * drivers/media/video/mt9t111_reg.h
> + *
> + * mt9t111 sensor driver header file
> + *
> + * Copyright (C) 2009 Leopard Imaging
> + *
> + * This file is licensed under the terms of the GNU General Public License
> + * version 2. This program is licensed "as is" without any warranty of any
> + * kind, whether express or implied.
> + */
> +
> +#ifndef MT9T111_REG_H
> +#define MT9T111_REG_H
> +
> +/* register addr */
> +#define MT9T111_CHIP_ID (0x0000)
> +
> +/* register value */
> +#define MT9T111_CHIP_ID_VALUE (0x2680)
> +
> +#define MT9T111_IMAGE_WIDTH (640)
> +#define MT9T111_IMAGE_HEIGHT (480)
A general note. We assume, that mt9t112 and mt9t111 are _very_ similar and
can be supported by one driver with maybe some _minor_ chip-specific
differences. What you seem to be doing is combine two drivers in one.
Practically duplicating most functionality. If the chips are indeed that
different, we need two drivers. Otherwise you really only should need some
_small_ additions to mt9t112.
> +
> +typedef struct {
> + u16 delay_time;
> + u16 addr;
> + u16 data;
> +} mt9t111_regs;
> +
> +mt9t111_regs patch_rev6[] = {
> + {0, 0x0982, 0x0},
mt9t112 doesn't need any such register magic. If they are similar, we
shouldn't have to add them for mt9t111 either.
> + {0, 0x098A, 0xCE7},
> + {0, 0x0990, 0x3C3C},
> + {0, 0x0992, 0x3C3C},
> + {0, 0x0994, 0x3C5F},
> + {0, 0x0996, 0x4F30},
> + {0, 0x0998, 0xED08},
> + {0, 0x099a, 0xBD61},
> + {0, 0x099c, 0xD5CE},
> + {0, 0x099e, 0x4CD},
> + {0, 0x098A, 0xCF7},
> + {0, 0x0990, 0x1F17},
> + {0, 0x0992, 0x211},
> + {0, 0x0994, 0xCC33},
> + {0, 0x0996, 0x2E30},
> + {0, 0x0998, 0xED02},
> + {0, 0x099a, 0xCCFF},
> + {0, 0x099c, 0xFDED},
> + {0, 0x099e, 0xCC},
> + {0, 0x098A, 0xD07},
> + {0, 0x0990, 0x2},
> + {0, 0x0992, 0xBD70},
> + {0, 0x0994, 0x6D18},
> + {0, 0x0996, 0xDE1F},
> + {0, 0x0998, 0x181F},
> + {0, 0x099a, 0x8E01},
> + {0, 0x099c, 0x10CC},
> + {0, 0x099e, 0x3C52},
> + {0, 0x098A, 0xD17},
> + {0, 0x0990, 0x30ED},
> + {0, 0x0992, 0x18},
> + {0, 0x0994, 0xECA0},
> + {0, 0x0996, 0xC4FD},
> + {0, 0x0998, 0xBD70},
> + {0, 0x099a, 0x2120},
> + {0, 0x099c, 0x1ECC},
> + {0, 0x099e, 0x3C52},
> + {0, 0x098A, 0xD27},
> + {0, 0x0990, 0x30ED},
> + {0, 0x0992, 0xDE},
> + {0, 0x0994, 0x1FEC},
> + {0, 0x0996, 0xA0BD},
> + {0, 0x0998, 0x7021},
> + {0, 0x099a, 0xCC3C},
> + {0, 0x099c, 0x5230},
> + {0, 0x099e, 0xED02},
> + {0, 0x098A, 0xD37},
> + {0, 0x0990, 0xCCFF},
> + {0, 0x0992, 0xFCED},
> + {0, 0x0994, 0xCC},
> + {0, 0x0996, 0x2},
> + {0, 0x0998, 0xBD70},
> + {0, 0x099a, 0x6DFC},
> + {0, 0x099c, 0x4E1},
> + {0, 0x099e, 0x1A83},
> + {0, 0x098A, 0xD47},
> + {0, 0x0990, 0x1},
> + {0, 0x0992, 0x2720},
> + {0, 0x0994, 0x1A83},
> + {0, 0x0996, 0x4},
> + {0, 0x0998, 0x271E},
> + {0, 0x099a, 0x1A83},
> + {0, 0x099c, 0x8},
> + {0, 0x099e, 0x271C},
> + {0, 0x098A, 0xD57},
> + {0, 0x0990, 0x1A83},
> + {0, 0x0992, 0x10},
> + {0, 0x0994, 0x271A},
> + {0, 0x0996, 0x1A83},
> + {0, 0x0998, 0x20},
> + {0, 0x099a, 0x2718},
> + {0, 0x099c, 0x1A83},
> + {0, 0x099e, 0x40},
> + {0, 0x098A, 0xD67},
> + {0, 0x0990, 0x2716},
> + {0, 0x0992, 0x2019},
> + {0, 0x0994, 0xC61E},
> + {0, 0x0996, 0x2012},
> + {0, 0x0998, 0xC622},
> + {0, 0x099a, 0x200E},
> + {0, 0x099c, 0xC621},
> + {0, 0x099e, 0x200A},
> + {0, 0x098A, 0xD77},
> + {0, 0x0990, 0xC620},
> + {0, 0x0992, 0x2006},
> + {0, 0x0994, 0xC62A},
> + {0, 0x0996, 0x2002},
> + {0, 0x0998, 0xC62B},
> + {0, 0x099a, 0x30ED},
> + {0, 0x099c, 0x8CC},
> + {0, 0x099e, 0x3400},
> + {0, 0x098A, 0xD87},
> + {0, 0x0990, 0x30ED},
> + {0, 0x0992, 0x34},
> + {0, 0x0994, 0xBD6F},
> + {0, 0x0996, 0xD184},
> + {0, 0x0998, 0x330},
> + {0, 0x099a, 0xED07},
> + {0, 0x099c, 0xA60A},
> + {0, 0x099e, 0x4848},
> + {0, 0x098A, 0xD97},
> + {0, 0x0990, 0x5FED},
> + {0, 0x0992, 0x5EA},
> + {0, 0x0994, 0x8AA},
> + {0, 0x0996, 0x731},
> + {0, 0x0998, 0xBD70},
> + {0, 0x099a, 0x2130},
> + {0, 0x099c, 0xC60A},
> + {0, 0x099e, 0x3A35},
> + {0, 0x098A, 0xDA7},
> + {0, 0x0990, 0x3937},
> + {0, 0x0992, 0x3C3C},
> + {0, 0x0994, 0x3C34},
> + {0, 0x0996, 0xDE2F},
> + {0, 0x0998, 0xEE0E},
> + {0, 0x099a, 0xAD00},
> + {0, 0x099c, 0x7D13},
> + {0, 0x099e, 0xEF27},
> + {0, 0x098A, 0xDB7},
> + {0, 0x0990, 0x7CCE},
> + {0, 0x0992, 0x13E0},
> + {0, 0x0994, 0x1E05},
> + {0, 0x0996, 0x1060},
> + {0, 0x0998, 0xE60E},
> + {0, 0x099a, 0x4FC3},
> + {0, 0x099c, 0x13F0},
> + {0, 0x099e, 0x8FE6},
> + {0, 0x098A, 0xDC7},
> + {0, 0x0990, 0x30},
> + {0, 0x0992, 0xE107},
> + {0, 0x0994, 0x2216},
> + {0, 0x0996, 0xF613},
> + {0, 0x0998, 0xEE4F},
> + {0, 0x099a, 0xC313},
> + {0, 0x099c, 0xF38F},
> + {0, 0x099e, 0xE600},
> + {0, 0x098A, 0xDD7},
> + {0, 0x0990, 0x30E1},
> + {0, 0x0992, 0x725},
> + {0, 0x0994, 0x7F6},
> + {0, 0x0996, 0x13EE},
> + {0, 0x0998, 0xC103},
> + {0, 0x099a, 0x253C},
> + {0, 0x099c, 0x7F13},
> + {0, 0x099e, 0xEEF6},
> + {0, 0x098A, 0xDE7},
> + {0, 0x0990, 0x13EF},
> + {0, 0x0992, 0xE706},
> + {0, 0x0994, 0xCC13},
> + {0, 0x0996, 0xF0ED},
> + {0, 0x0998, 0x4CC},
> + {0, 0x099a, 0x13F3},
> + {0, 0x099c, 0x200F},
> + {0, 0x099e, 0x7C13},
> + {0, 0x098A, 0xDF7},
> + {0, 0x0990, 0xEEEC},
> + {0, 0x0992, 0x4C3},
> + {0, 0x0994, 0x1},
> + {0, 0x0996, 0xED04},
> + {0, 0x0998, 0xEC02},
> + {0, 0x099a, 0xC300},
> + {0, 0x099c, 0x1ED},
> + {0, 0x099e, 0x2F6},
> + {0, 0x098A, 0xE07},
> + {0, 0x0990, 0x13EE},
> + {0, 0x0992, 0xE106},
> + {0, 0x0994, 0x2412},
> + {0, 0x0996, 0xEE04},
> + {0, 0x0998, 0xE600},
> + {0, 0x099a, 0x30E1},
> + {0, 0x099c, 0x722},
> + {0, 0x099e, 0xDFEE},
> + {0, 0x098A, 0xE17},
> + {0, 0x0990, 0x2E6},
> + {0, 0x0992, 0x30},
> + {0, 0x0994, 0xE107},
> + {0, 0x0996, 0x25D6},
> + {0, 0x0998, 0xDE49},
> + {0, 0x099a, 0xEE08},
> + {0, 0x099c, 0xAD00},
> + {0, 0x099e, 0xCC13},
> + {0, 0x098A, 0xE27},
> + {0, 0x0990, 0xF630},
> + {0, 0x0992, 0xED00},
> + {0, 0x0994, 0xDE2F},
> + {0, 0x0996, 0xEE10},
> + {0, 0x0998, 0xCC13},
> + {0, 0x099a, 0xFAAD},
> + {0, 0x099c, 0x38},
> + {0, 0x099e, 0x3838},
> + {0, 0x098A, 0xE37},
> + {0, 0x0990, 0x3839},
> + {0, 0x098A, 0x1000},
> + {0, 0x0990, 0xCC10},
> + {0, 0x0992, 0x9BD},
> + {0, 0x0994, 0x4224},
> + {0, 0x0996, 0x7E10},
> + {0, 0x0998, 0x9C6},
> + {0, 0x099a, 0x1F7},
> + {0, 0x099c, 0x18A},
> + {0, 0x099e, 0xC606},
> + {0, 0x098A, 0x1010},
> + {0, 0x0990, 0xF701},
> + {0, 0x0992, 0x8BDE},
> + {0, 0x0994, 0x3F18},
> + {0, 0x0996, 0xCE0B},
> + {0, 0x0998, 0xF1CC},
> + {0, 0x099a, 0x11},
> + {0, 0x099c, 0xBDD7},
> + {0, 0x099e, 0xCC},
> + {0, 0x098A, 0x1020},
> + {0, 0x0990, 0xBF1},
> + {0, 0x0992, 0xDD3F},
> + {0, 0x0994, 0xDE35},
> + {0, 0x0996, 0x18CE},
> + {0, 0x0998, 0xC03},
> + {0, 0x099a, 0xCC00},
> + {0, 0x099c, 0x3FBD},
> + {0, 0x099e, 0xD700},
> + {0, 0x098A, 0x1030},
> + {0, 0x0990, 0xCC0C},
> + {0, 0x0992, 0x3DD},
> + {0, 0x0994, 0x35DE},
> + {0, 0x0996, 0x4718},
> + {0, 0x0998, 0xCE0C},
> + {0, 0x099a, 0x43CC},
> + {0, 0x099c, 0x15},
> + {0, 0x099e, 0xBDD7},
> + {0, 0x098A, 0x1040},
> + {0, 0x0990, 0xCC},
> + {0, 0x0992, 0xC43},
> + {0, 0x0994, 0xDD47},
> + {0, 0x0996, 0xFE00},
> + {0, 0x0998, 0x3318},
> + {0, 0x099a, 0xCE0C},
> + {0, 0x099c, 0x59CC},
> + {0, 0x099e, 0x9},
> + {0, 0x098A, 0x1050},
> + {0, 0x0990, 0xBDD7},
> + {0, 0x0992, 0xCC},
> + {0, 0x0994, 0xC59},
> + {0, 0x0996, 0xFD00},
> + {0, 0x0998, 0x33DE},
> + {0, 0x099a, 0x4118},
> + {0, 0x099c, 0xCE0C},
> + {0, 0x099e, 0x63CC},
> + {0, 0x098A, 0x1060},
> + {0, 0x0990, 0xD},
> + {0, 0x0992, 0xBDD7},
> + {0, 0x0994, 0xCC},
> + {0, 0x0996, 0xC63},
> + {0, 0x0998, 0xDD41},
> + {0, 0x099a, 0xFE00},
> + {0, 0x099c, 0x3118},
> + {0, 0x099e, 0xCE0C},
> + {0, 0x098A, 0x1070},
> + {0, 0x0990, 0x71CC},
> + {0, 0x0992, 0x29},
> + {0, 0x0994, 0xBDD7},
> + {0, 0x0996, 0xCC},
> + {0, 0x0998, 0xC71},
> + {0, 0x099a, 0xFD00},
> + {0, 0x099c, 0x31DE},
> + {0, 0x099e, 0x3918},
> + {0, 0x098A, 0x1080},
> + {0, 0x0990, 0xCE0C},
> + {0, 0x0992, 0x9BCC},
> + {0, 0x0994, 0x23},
> + {0, 0x0996, 0xBDD7},
> + {0, 0x0998, 0xCC},
> + {0, 0x099a, 0xC9B},
> + {0, 0x099c, 0xDD39},
> + {0, 0x099e, 0xDE49},
> + {0, 0x098A, 0x1090},
> + {0, 0x0990, 0x18CE},
> + {0, 0x0992, 0xCBF},
> + {0, 0x0994, 0xCC00},
> + {0, 0x0996, 0xDBD},
> + {0, 0x0998, 0xD700},
> + {0, 0x099a, 0xCC0C},
> + {0, 0x099c, 0xBFDD},
> + {0, 0x099e, 0x49CC},
> + {0, 0x098A, 0x10A0},
> + {0, 0x0990, 0x1162},
> + {0, 0x0992, 0xFD0B},
> + {0, 0x0994, 0xFDCC},
> + {0, 0x0996, 0xCE7},
> + {0, 0x0998, 0xFD0C},
> + {0, 0x099a, 0x1FCC},
> + {0, 0x099c, 0x1245},
> + {0, 0x099e, 0xFD0C},
> + {0, 0x098A, 0x10B0},
> + {0, 0x0990, 0x51CC},
> + {0, 0x0992, 0x110B},
> + {0, 0x0994, 0xFD0C},
> + {0, 0x0996, 0x5BCC},
> + {0, 0x0998, 0x1108},
> + {0, 0x099a, 0xFD0C},
> + {0, 0x099c, 0x65CC},
> + {0, 0x099e, 0x10D0},
> + {0, 0x098A, 0x10C0},
> + {0, 0x0990, 0xFD0C},
> + {0, 0x0992, 0x7BCC},
> + {0, 0x0994, 0x12DE},
> + {0, 0x0996, 0xFD0C},
> + {0, 0x0998, 0xA7CC},
> + {0, 0x099a, 0xDA8},
> + {0, 0x099c, 0xFD0C},
> + {0, 0x099e, 0xCB39},
> + {0, 0x098A, 0x10D0},
> + {0, 0x0990, 0x37DE},
> + {0, 0x0992, 0x1DEC},
> + {0, 0x0994, 0xC5F},
> + {0, 0x0996, 0x8402},
> + {0, 0x0998, 0x4416},
> + {0, 0x099a, 0x4FF7},
> + {0, 0x099c, 0xCCD},
> + {0, 0x099e, 0xE60B},
> + {0, 0x098A, 0x10E0},
> + {0, 0x0990, 0xC407},
> + {0, 0x0992, 0xF70C},
> + {0, 0x0994, 0xCE7F},
> + {0, 0x0996, 0x30C4},
> + {0, 0x0998, 0xEC25},
> + {0, 0x099a, 0xFD30},
> + {0, 0x099c, 0xC5FC},
> + {0, 0x099e, 0x6D6},
> + {0, 0x098A, 0x10F0},
> + {0, 0x0990, 0xFD30},
> + {0, 0x0992, 0xC701},
> + {0, 0x0994, 0xFC30},
> + {0, 0x0996, 0xC0FD},
> + {0, 0x0998, 0xBED},
> + {0, 0x099a, 0xFC30},
> + {0, 0x099c, 0xC2FD},
> + {0, 0x099e, 0xBEF},
> + {0, 0x098A, 0x1100},
> + {0, 0x0990, 0x30E6},
> + {0, 0x0992, 0xBD},
> + {0, 0x0994, 0x5203},
> + {0, 0x0996, 0x3139},
> + {0, 0x0998, 0x7E9E},
> + {0, 0x099a, 0x143C},
> + {0, 0x099c, 0x3C3C},
> + {0, 0x099e, 0x2101},
> + {0, 0x098A, 0x1110},
> + {0, 0x0990, 0xCC00},
> + {0, 0x0992, 0x18BD},
> + {0, 0x0994, 0x6FD1},
> + {0, 0x0996, 0xC504},
> + {0, 0x0998, 0x26F5},
> + {0, 0x099a, 0xDC25},
> + {0, 0x099c, 0x30ED},
> + {0, 0x099e, 0x420},
> + {0, 0x098A, 0x1120},
> + {0, 0x0990, 0x12EE},
> + {0, 0x0992, 0x43C},
> + {0, 0x0994, 0x1838},
> + {0, 0x0996, 0xE621},
> + {0, 0x0998, 0x18E7},
> + {0, 0x099a, 0xBE30},
> + {0, 0x099c, 0xEE04},
> + {0, 0x099e, 0xEC1D},
> + {0, 0x098A, 0x1130},
> + {0, 0x0990, 0x30ED},
> + {0, 0x0992, 0x4EC},
> + {0, 0x0994, 0x426},
> + {0, 0x0996, 0xEACC},
> + {0, 0x0998, 0x1A},
> + {0, 0x099a, 0xED02},
> + {0, 0x099c, 0xCCFB},
> + {0, 0x099e, 0xFFED},
> + {0, 0x098A, 0x1140},
> + {0, 0x0990, 0xCC},
> + {0, 0x0992, 0x400},
> + {0, 0x0994, 0xBD70},
> + {0, 0x0996, 0x6DCC},
> + {0, 0x0998, 0x1A},
> + {0, 0x099a, 0x30ED},
> + {0, 0x099c, 0x2CC},
> + {0, 0x099e, 0xFBFF},
> + {0, 0x098A, 0x1150},
> + {0, 0x0990, 0xED00},
> + {0, 0x0992, 0x5F4F},
> + {0, 0x0994, 0xBD70},
> + {0, 0x0996, 0x6D5F},
> + {0, 0x0998, 0xBD5B},
> + {0, 0x099a, 0x17BD},
> + {0, 0x099c, 0x558B},
> + {0, 0x099e, 0x3838},
> + {0, 0x098A, 0x1160},
> + {0, 0x0990, 0x3839},
> + {0, 0x0992, 0x3C3C},
> + {0, 0x0994, 0xC640},
> + {0, 0x0996, 0xF730},
> + {0, 0x0998, 0xC4FC},
> + {0, 0x099a, 0xBED},
> + {0, 0x099c, 0xFD30},
> + {0, 0x099e, 0xC0FC},
> + {0, 0x098A, 0x1170},
> + {0, 0x0990, 0xBEF},
> + {0, 0x0992, 0xFD30},
> + {0, 0x0994, 0xC2DE},
> + {0, 0x0996, 0x1DEC},
> + {0, 0x0998, 0x25FD},
> + {0, 0x099a, 0x30C5},
> + {0, 0x099c, 0x101},
> + {0, 0x099e, 0x1FC},
> + {0, 0x098A, 0x1180},
> + {0, 0x0990, 0x30C2},
> + {0, 0x0992, 0xFD06},
> + {0, 0x0994, 0xD6EC},
> + {0, 0x0996, 0xC5F},
> + {0, 0x0998, 0x8402},
> + {0, 0x099a, 0x4416},
> + {0, 0x099c, 0x4F30},
> + {0, 0x099e, 0xE703},
> + {0, 0x098A, 0x1190},
> + {0, 0x0990, 0xF10C},
> + {0, 0x0992, 0xCD27},
> + {0, 0x0994, 0x15F1},
> + {0, 0x0996, 0xCCD},
> + {0, 0x0998, 0x2309},
> + {0, 0x099a, 0xFC06},
> + {0, 0x099c, 0xD604},
> + {0, 0x099e, 0xFD06},
> + {0, 0x098A, 0x11A0},
> + {0, 0x0990, 0xD620},
> + {0, 0x0992, 0x7FC},
> + {0, 0x0994, 0x6D6},
> + {0, 0x0996, 0x5FD},
> + {0, 0x0998, 0x6D6},
> + {0, 0x099a, 0xDE1D},
> + {0, 0x099c, 0xE60B},
> + {0, 0x099e, 0xC407},
> + {0, 0x098A, 0x11B0},
> + {0, 0x0990, 0x30E7},
> + {0, 0x0992, 0x2F1},
> + {0, 0x0994, 0xCCE},
> + {0, 0x0996, 0x272C},
> + {0, 0x0998, 0x7D0C},
> + {0, 0x099a, 0xCE27},
> + {0, 0x099c, 0x275D},
> + {0, 0x099e, 0x2724},
> + {0, 0x098A, 0x11C0},
> + {0, 0x0990, 0x7F30},
> + {0, 0x0992, 0xC4FC},
> + {0, 0x0994, 0x6D6},
> + {0, 0x0996, 0xFD30},
> + {0, 0x0998, 0xC5F6},
> + {0, 0x099a, 0xCCE},
> + {0, 0x099c, 0x4FFD},
> + {0, 0x099e, 0x30C7},
> + {0, 0x098A, 0x11D0},
> + {0, 0x0990, 0xC640},
> + {0, 0x0992, 0xF730},
> + {0, 0x0994, 0xC4E6},
> + {0, 0x0996, 0x24F},
> + {0, 0x0998, 0xFD30},
> + {0, 0x099a, 0xC501},
> + {0, 0x099c, 0x101},
> + {0, 0x099e, 0xFC30},
> + {0, 0x098A, 0x11E0},
> + {0, 0x0990, 0xC2FD},
> + {0, 0x0992, 0x6D6},
> + {0, 0x0994, 0x7D06},
> + {0, 0x0996, 0xCB27},
> + {0, 0x0998, 0x2EC6},
> + {0, 0x099a, 0x40F7},
> + {0, 0x099c, 0x30C4},
> + {0, 0x099e, 0xFC06},
> + {0, 0x098A, 0x11F0},
> + {0, 0x0990, 0xC104},
> + {0, 0x0992, 0xF306},
> + {0, 0x0994, 0xD6ED},
> + {0, 0x0996, 0x5F},
> + {0, 0x0998, 0x6D00},
> + {0, 0x099a, 0x2A01},
> + {0, 0x099c, 0x5317},
> + {0, 0x099e, 0xFD30},
> + {0, 0x098A, 0x1200},
> + {0, 0x0990, 0xC0EC},
> + {0, 0x0992, 0xFD},
> + {0, 0x0994, 0x30C2},
> + {0, 0x0996, 0xFC06},
> + {0, 0x0998, 0xC1FD},
> + {0, 0x099a, 0x30C5},
> + {0, 0x099c, 0x101},
> + {0, 0x099e, 0x1FC},
> + {0, 0x098A, 0x1210},
> + {0, 0x0990, 0x30C2},
> + {0, 0x0992, 0xFD06},
> + {0, 0x0994, 0xC720},
> + {0, 0x0996, 0x227F},
> + {0, 0x0998, 0x30C4},
> + {0, 0x099a, 0xDE1D},
> + {0, 0x099c, 0xEC25},
> + {0, 0x099e, 0xFD30},
> + {0, 0x098A, 0x1220},
> + {0, 0x0990, 0xC5FC},
> + {0, 0x0992, 0x6D6},
> + {0, 0x0994, 0xFD30},
> + {0, 0x0996, 0xC701},
> + {0, 0x0998, 0xFC30},
> + {0, 0x099a, 0xC0FD},
> + {0, 0x099c, 0x6D0},
> + {0, 0x099e, 0xFC30},
> + {0, 0x098A, 0x1230},
> + {0, 0x0990, 0xC2FD},
> + {0, 0x0992, 0x6D2},
> + {0, 0x0994, 0xEC25},
> + {0, 0x0996, 0xFD06},
> + {0, 0x0998, 0xC3BD},
> + {0, 0x099a, 0x953C},
> + {0, 0x099c, 0xDE3F},
> + {0, 0x099e, 0xEE10},
> + {0, 0x098A, 0x1240},
> + {0, 0x0990, 0xAD00},
> + {0, 0x0992, 0x3838},
> + {0, 0x0994, 0x3930},
> + {0, 0x0996, 0x8FC3},
> + {0, 0x0998, 0xFFE9},
> + {0, 0x099a, 0x8F35},
> + {0, 0x099c, 0xBDAD},
> + {0, 0x099e, 0x1530},
> + {0, 0x098A, 0x1250},
> + {0, 0x0990, 0x6F16},
> + {0, 0x0992, 0x18DE},
> + {0, 0x0994, 0x1918},
> + {0, 0x0996, 0x8FC3},
> + {0, 0x0998, 0x14B},
> + {0, 0x099a, 0x188F},
> + {0, 0x099c, 0x18EC},
> + {0, 0x099e, 0xFD},
> + {0, 0x098A, 0x1260},
> + {0, 0x0990, 0x50E},
> + {0, 0x0992, 0x18EC},
> + {0, 0x0994, 0x2FD},
> + {0, 0x0996, 0x510},
> + {0, 0x0998, 0xE616},
> + {0, 0x099a, 0x4FED},
> + {0, 0x099c, 0x418},
> + {0, 0x099e, 0x8FC3},
> + {0, 0x098A, 0x1270},
> + {0, 0x0990, 0xFFCB},
> + {0, 0x0992, 0xE304},
> + {0, 0x0994, 0x8FE6},
> + {0, 0x0996, 0xF7},
> + {0, 0x0998, 0x514},
> + {0, 0x099a, 0x18DE},
> + {0, 0x099c, 0x1930},
> + {0, 0x099e, 0xE616},
> + {0, 0x098A, 0x1280},
> + {0, 0x0990, 0x4FED},
> + {0, 0x0992, 0x418},
> + {0, 0x0994, 0x8FC3},
> + {0, 0x0996, 0x119},
> + {0, 0x0998, 0xE304},
> + {0, 0x099a, 0x8FE6},
> + {0, 0x099c, 0xF7},
> + {0, 0x099e, 0x515},
> + {0, 0x098A, 0x1290},
> + {0, 0x0990, 0xFC05},
> + {0, 0x0992, 0x5BFD},
> + {0, 0x0994, 0x512},
> + {0, 0x0996, 0xDE37},
> + {0, 0x0998, 0xEE08},
> + {0, 0x099a, 0xAD00},
> + {0, 0x099c, 0x30E6},
> + {0, 0x099e, 0x164F},
> + {0, 0x098A, 0x12A0},
> + {0, 0x0990, 0x5ED},
> + {0, 0x0992, 0x48F},
> + {0, 0x0994, 0xC300},
> + {0, 0x0996, 0x630},
> + {0, 0x0998, 0xE304},
> + {0, 0x099a, 0x8FF6},
> + {0, 0x099c, 0x516},
> + {0, 0x099e, 0x4FED},
> + {0, 0x098A, 0x12B0},
> + {0, 0x0990, 0x30},
> + {0, 0x0992, 0x6C16},
> + {0, 0x0994, 0xE616},
> + {0, 0x0996, 0xC103},
> + {0, 0x0998, 0x2598},
> + {0, 0x099a, 0xCC32},
> + {0, 0x099c, 0x8EED},
> + {0, 0x099e, 0xEC},
> + {0, 0x098A, 0x12C0},
> + {0, 0x0990, 0x6BD},
> + {0, 0x0992, 0x7021},
> + {0, 0x0994, 0xCC32},
> + {0, 0x0996, 0x6C30},
> + {0, 0x0998, 0xED02},
> + {0, 0x099a, 0xCCF8},
> + {0, 0x099c, 0xED},
> + {0, 0x099e, 0xA6},
> + {0, 0x098A, 0x12D0},
> + {0, 0x0990, 0x9E3},
> + {0, 0x0992, 0xA84},
> + {0, 0x0994, 0x7BD},
> + {0, 0x0996, 0x706D},
> + {0, 0x0998, 0x30C6},
> + {0, 0x099a, 0x173A},
> + {0, 0x099c, 0x3539},
> + {0, 0x099e, 0x3CBD},
> + {0, 0x098A, 0x12E0},
> + {0, 0x0990, 0x776D},
> + {0, 0x0992, 0xCC32},
> + {0, 0x0994, 0x5C30},
> + {0, 0x0996, 0xED00},
> + {0, 0x0998, 0xFC13},
> + {0, 0x099a, 0x8683},
> + {0, 0x099c, 0x1},
> + {0, 0x099e, 0xBD70},
> + {0, 0x098A, 0x12F0},
> + {0, 0x0990, 0x21CC},
> + {0, 0x0992, 0x325E},
> + {0, 0x0994, 0x30ED},
> + {0, 0x0996, 0xFC},
> + {0, 0x0998, 0x1388},
> + {0, 0x099a, 0x8300},
> + {0, 0x099c, 0x1BD},
> + {0, 0x099e, 0x7021},
> + {0, 0x098A, 0x1300},
> + {0, 0x0990, 0x3839},
> + {0, 0x098E, 0x0010},
> + {0, 0x0990, 0x1000},
> + {0, 0x098E, 0x0003},
> + {100, 0x0990, 0x0004}
> +};
> +
> +mt9t111_regs def_regs1[] = {
> + {0, 0x001A, 0x0218},
> + {0, 0x001E, 0x0777},
> + {0, 0x3084, 0x2409},
> + {0, 0x3092, 0x0A49},
> + {0, 0x3094, 0x4949},
> + {0, 0x3096, 0x4950},
> + {0, 0x0018, 0x402D},
> + {100, 0x0018, 0x402C},
> + {0, 0x098E, 0x6800},
> + {0, 0x0990, 0x0280},
> + {0, 0x098E, 0x6802},
> + {0, 0x0990, 0x01E0},
> + {0, 0x098E, 0xE88E},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0x68A0},
> + {0, 0x0990, 0x082D},
> + {0, 0x098E, 0x4802},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0x4804},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0x4806},
> + {0, 0x0990, 0x060D},
> + {0, 0x098E, 0x4808},
> + {0, 0x0990, 0x080D},
> + {0, 0x098E, 0x480A},
> + {0, 0x0990, 0x0111},
> + {0, 0x098E, 0x480C},
> + {0, 0x0990, 0x046C},
> + {0, 0x098E, 0x480F},
> + {0, 0x0990, 0x00CC},
> + {0, 0x098E, 0x4811},
> + {0, 0x0990, 0x0381},
> + {0, 0x098E, 0x4813},
> + {0, 0x0990, 0x024F},
> + {0, 0x098E, 0x481D},
> + {0, 0x0990, 0x05AE},
> + {0, 0x098E, 0x481F},
> + {0, 0x0990, 0x05D0},
> + {0, 0x098E, 0x4825},
> + {0, 0x0990, 0x07AC},
> + {0, 0x098E, 0x6C00},
> + {0, 0x0990, 0x0800},
> + {0, 0x098E, 0x6C02},
> + {0, 0x0990, 0x0600},
> + {0, 0x098E, 0xEC8E},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0x6CA0},
> + {0, 0x0990, 0x082D},
> + {0, 0x098E, 0x484A},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0x484C},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0x484E},
> + {0, 0x0990, 0x060D},
> + {0, 0x098E, 0x4850},
> + {0, 0x0990, 0x080D},
> + {0, 0x098E, 0x4852},
> + {0, 0x0990, 0x0111},
> + {0, 0x098E, 0x4854},
> + {0, 0x0990, 0x146C},
> + {0, 0x098E, 0x4857},
> + {0, 0x0990, 0x00CC},
> + {0, 0x098E, 0x4859},
> + {0, 0x0990, 0x0381},
> + {0, 0x098E, 0x485B},
> + {0, 0x0990, 0x024F},
> + {0, 0x098E, 0x4865},
> + {0, 0x0990, 0x05AE},
> + {0, 0x098E, 0x4867},
> + {0, 0x0990, 0x05D0},
> + {0, 0x098E, 0x486D},
> + {0, 0x0990, 0x07AC},
> + {0, 0x098E, 0xC8A5},
> + {0, 0x0990, 0x001D},
> + {0, 0x098E, 0xC8A6},
> + {0, 0x0990, 0x0020},
> + {0, 0x098E, 0xC8A7},
> + {0, 0x0990, 0x0023},
> + {0, 0x098E, 0xC8A8},
> + {0, 0x0990, 0x0026},
> + {0, 0x098E, 0xC844},
> + {0, 0x0990, 0x0091},
> + {0, 0x098E, 0xC92F},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0xC845},
> + {0, 0x0990, 0x0079},
> + {0, 0x098E, 0xC92D},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0xC88C},
> + {0, 0x0990, 0x0091},
> + {0, 0x098E, 0xC930},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0xC88D},
> + {0, 0x0990, 0x0079},
> + {0, 0x098E, 0xC92E},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0xA002},
> + {0, 0x0990, 0x0010},
> + {0, 0x098E, 0xA009},
> + {0, 0x0990, 0x0002},
> + {0, 0x098E, 0xA00A},
> + {0, 0x0990, 0x0003},
> + {0, 0x098E, 0xA00C},
> + {0, 0x0990, 0x000A},
> + {0, 0x098E, 0x4846},
> + {0, 0x0990, 0x0014},
> + {0, 0x098E, 0x68AA},
> + {0, 0x0990, 0x0278},
> + {0, 0x098E, 0x488E},
> + {0, 0x0990, 0x0014},
> + {0, 0x098E, 0x6CAA},
> + {0, 0x0990, 0x0218},
> + {0, 0x098E, 0x8400},
> + {0, 0x0990, 0x0006},
> + {0, 0x098E, 0x8400},
> + {0, 0x0990, 0x0005},
> + {0, 0x3C20, 0x0001},
> + {0, 0x364A, 0x7D2F},
> + {0, 0x364C, 0x79EB},
> + {0, 0x364E, 0x18D2},
> + {0, 0x3650, 0x9F8F},
> + {0, 0x3652, 0xA7D2},
> + {0, 0x368A, 0x460C},
> + {0, 0x368C, 0x14F0},
> + {0, 0x368E, 0x946F},
> + {0, 0x3690, 0xC471},
> + {0, 0x3692, 0x04B1},
> + {0, 0x36CA, 0x0433},
> + {0, 0x36CC, 0x680D},
> + {0, 0x36CE, 0xEEF3},
> + {0, 0x36D0, 0x4850},
> + {0, 0x36D2, 0xF233},
> + {0, 0x370A, 0xB2AF},
> + {0, 0x370C, 0x2CF0},
> + {0, 0x370E, 0x3F10},
> + {0, 0x3710, 0xC673},
> + {0, 0x3712, 0xA972},
> + {0, 0x374A, 0x0590},
> + {0, 0x374C, 0xAFB3},
> + {0, 0x374E, 0x93D7},
> + {0, 0x3750, 0x8D12},
> + {0, 0x3752, 0x2539},
> + {0, 0x3640, 0x0350},
> + {0, 0x3642, 0x322C},
> + {0, 0x3644, 0x77D1},
> + {0, 0x3646, 0xA26F},
> + {0, 0x3648, 0xC872},
> + {0, 0x3680, 0x0C4C},
> + {0, 0x3682, 0x9510},
> + {0, 0x3684, 0x110E},
> + {0, 0x3686, 0x4331},
> + {0, 0x3688, 0xC1CF},
> + {0, 0x36C0, 0x6152},
> + {0, 0x36C2, 0x038E},
> + {0, 0x36C4, 0x9AF4},
> + {0, 0x36C6, 0xE12F},
> + {0, 0x36C8, 0x09F3},
> + {0, 0x3700, 0xC5AF},
> + {0, 0x3702, 0xCA90},
> + {0, 0x3704, 0x5D0F},
> + {0, 0x3706, 0x3293},
> + {0, 0x3708, 0x2B92},
> + {0, 0x3740, 0xC590},
> + {0, 0x3742, 0x8133},
> + {0, 0x3744, 0xE0F6},
> + {0, 0x3746, 0x0254},
> + {0, 0x3748, 0x10B9},
> + {0, 0x3654, 0x7F8F},
> + {0, 0x3656, 0x6F6C},
> + {0, 0x3658, 0x5971},
> + {0, 0x365A, 0x9A0F},
> + {0, 0x365C, 0xA1B2},
> + {0, 0x3694, 0xB00C},
> + {0, 0x3696, 0xEBCF},
> + {0, 0x3698, 0x06AD},
> + {0, 0x369A, 0x4D31},
> + {0, 0x369C, 0x2A4E},
> + {0, 0x36D4, 0x4752},
> + {0, 0x36D6, 0x724D},
> + {0, 0x36D8, 0xAD34},
> + {0, 0x36DA, 0x1350},
> + {0, 0x36DC, 0x4E94},
> + {0, 0x3714, 0xA06E},
> + {0, 0x3716, 0x9152},
> + {0, 0x3718, 0x1F53},
> + {0, 0x371A, 0x3933},
> + {0, 0x371C, 0xBA94},
> + {0, 0x3754, 0x1233},
> + {0, 0x3756, 0xA032},
> + {0, 0x3758, 0xE936},
> + {0, 0x375A, 0xBE34},
> + {0, 0x375C, 0x02D9},
> + {0, 0x365E, 0x7DEF},
> + {0, 0x3660, 0x434B},
> + {0, 0x3662, 0x69F1},
> + {0, 0x3664, 0x8A0F},
> + {0, 0x3666, 0xBDB2},
> + {0, 0x369E, 0x290D},
> + {0, 0x36A0, 0x42CF},
> + {0, 0x36A2, 0xDC6D},
> + {0, 0x36A4, 0x91B1},
> + {0, 0x36A6, 0x9DE9},
> + {0, 0x36DE, 0x70B2},
> + {0, 0x36E0, 0x02AC},
> + {0, 0x36E2, 0x9714},
> + {0, 0x36E4, 0xF3CF},
> + {0, 0x36E6, 0x6BD1},
> + {0, 0x371E, 0xE42E},
> + {0, 0x3720, 0x1D32},
> + {0, 0x3722, 0xCC31},
> + {0, 0x3724, 0xAE94},
> + {0, 0x3726, 0x6413},
> + {0, 0x375E, 0xE290},
> + {0, 0x3760, 0x8F53},
> + {0, 0x3762, 0xF936},
> + {0, 0x3764, 0x4614},
> + {0, 0x3766, 0x1B59},
> + {0, 0x3784, 0x0404},
> + {0, 0x3782, 0x0304},
> + {0, 0x3210, 0x01B8},
> + {0, 0x098E, 0xC913},
> + {0, 0x0990, 0x000A},
> + {0, 0x098E, 0x686B},
> + {0, 0x0990, 0x05DC},
> + {0, 0x098E, 0x686D},
> + {0, 0x0990, 0x0BB8},
> + {0, 0x098E, 0x6C6B},
> + {0, 0x0990, 0x05DC},
> + {0, 0x098E, 0x6C6D},
> + {0, 0x0990, 0x0BB8},
> + {0, 0x098E, 0x3439},
> + {0, 0x0990, 0x05DC},
> + {0, 0x098E, 0x343B},
> + {0, 0x0990, 0x0BB8},
> + {0, 0x098E, 0x4926},
> + {0, 0x0990, 0x0001},
> + {0, 0x098E, 0x4928},
> + {0, 0x0990, 0x0002},
> + {0, 0x098E, 0x492A},
> + {0, 0x0990, 0x0656},
> + {0, 0x098E, 0x4D26},
> + {0, 0x0990, 0x0001},
> + {0, 0x098E, 0x4D28},
> + {0, 0x0990, 0x0002},
> + {0, 0x098E, 0x4D2A},
> + {0, 0x0990, 0x0656},
> + {0, 0x33F4, 0x040B},
> + {0, 0x098E, 0xC916},
> + {0, 0x0990, 0x0014},
> + {0, 0x098E, 0xC919},
> + {0, 0x0990, 0x0028},
> + {0, 0x098E, 0xC917},
> + {0, 0x0990, 0x0004},
> + {0, 0x098E, 0xC918},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0xC91A},
> + {0, 0x0990, 0x0001},
> + {0, 0x098E, 0xC91B},
> + {0, 0x0990, 0x0009},
> + {0, 0x326C, 0x0C00},
> + {0, 0x098E, 0x494B},
> + {0, 0x0990, 0x0042},
> + {0, 0x098E, 0x494D},
> + {0, 0x0990, 0x012C},
> + {0, 0x098E, 0xC91E},
> + {0, 0x0990, 0x0012},
> + {0, 0x098E, 0xC91F},
> + {0, 0x0990, 0x000A},
> + {0, 0x098E, 0xC920},
> + {0, 0x0990, 0x0012},
> + {0, 0x098E, 0xC921},
> + {0, 0x0990, 0x000A},
> + {0, 0x098E, 0xC922},
> + {0, 0x0990, 0x0026},
> + {0, 0x098E, 0xC923},
> + {0, 0x0990, 0x001E},
> + {0, 0x098E, 0xC924},
> + {0, 0x0990, 0x0026},
> + {0, 0x098E, 0xC925},
> + {0, 0x0990, 0x0026},
> + {0, 0x098E, 0xBC02},
> + {0, 0x0990, 0x0003},
> + {0, 0x098E, 0xBC05},
> + {0, 0x0990, 0x000E},
> + {0, 0x098E, 0xC950},
> + {0, 0x0990, 0x0064},
> + {0, 0x098E, 0xC94F},
> + {0, 0x0990, 0x0038},
> + {0, 0x098E, 0xC952},
> + {0, 0x0990, 0x0064},
> + {0, 0x098E, 0xC951},
> + {0, 0x0990, 0x0051},
> + {0, 0x098E, 0xC954},
> + {0, 0x0990, 0x0010},
> + {0, 0x098E, 0xC953},
> + {0, 0x0990, 0x0020},
> + {0, 0x098E, 0xC956},
> + {0, 0x0990, 0x0010},
> + {0, 0x098E, 0xC955},
> + {0, 0x0990, 0x0020},
> + {0, 0x098E, 0xC958},
> + {0, 0x0990, 0x0020},
> + {0, 0x098E, 0xC957},
> + {0, 0x0990, 0x0014},
> + {0, 0x098E, 0xC95A},
> + {0, 0x0990, 0x001D},
> + {0, 0x098E, 0xC959},
> + {0, 0x0990, 0x0020},
> + {0, 0x098E, 0xC95C},
> + {0, 0x0990, 0x000C},
> + {0, 0x098E, 0xC95B},
> + {0, 0x0990, 0x0008},
> + {0, 0x098E, 0xC95E},
> + {0, 0x0990, 0x000C},
> + {0, 0x098E, 0xC95D},
> + {0, 0x0990, 0x0008},
> + {0, 0x098E, 0xC95F},
> + {0, 0x0990, 0x0064},
> + {0, 0x098E, 0x48DC},
> + {0, 0x0990, 0x004D},
> + {0, 0x098E, 0x48DE},
> + {0, 0x0990, 0x0096},
> + {0, 0x098E, 0x48E0},
> + {0, 0x0990, 0x001D},
> + {0, 0x098E, 0x48E2},
> + {0, 0x0990, 0x004D},
> + {0, 0x098E, 0x48E4},
> + {0, 0x0990, 0x0096},
> + {0, 0x098E, 0x48E6},
> + {0, 0x0990, 0x001D},
> + {0, 0x098E, 0x48E8},
> + {0, 0x0990, 0x004D},
> + {0, 0x098E, 0x48EA},
> + {0, 0x0990, 0x0096},
> + {0, 0x098E, 0x48EC},
> + {0, 0x0990, 0x001D},
> + {0, 0x098E, 0xDC2A},
> + {0, 0x0990, 0x000B},
> + {0, 0x098E, 0xDC2B},
> + {0, 0x0990, 0x0017},
> + {0, 0x098E, 0xBC0B},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0xBC0C},
> + {0, 0x0990, 0x001B},
> + {0, 0x098E, 0xBC0D},
> + {0, 0x0990, 0x002A},
> + {0, 0x098E, 0xBC0E},
> + {0, 0x0990, 0x003E},
> + {0, 0x098E, 0xBC0F},
> + {0, 0x0990, 0x005A},
> + {0, 0x098E, 0xBC10},
> + {0, 0x0990, 0x0070},
> + {0, 0x098E, 0xBC11},
> + {0, 0x0990, 0x0081},
> + {0, 0x098E, 0xBC12},
> + {0, 0x0990, 0x0090},
> + {0, 0x098E, 0xBC13},
> + {0, 0x0990, 0x009E},
> + {0, 0x098E, 0xBC14},
> + {0, 0x0990, 0x00AB},
> + {0, 0x098E, 0xBC15},
> + {0, 0x0990, 0x00B6},
> + {0, 0x098E, 0xBC16},
> + {0, 0x0990, 0x00C1},
> + {0, 0x098E, 0xBC17},
> + {0, 0x0990, 0x00CB},
> + {0, 0x098E, 0xBC18},
> + {0, 0x0990, 0x00D5},
> + {0, 0x098E, 0xBC19},
> + {0, 0x0990, 0x00DE},
> + {0, 0x098E, 0xBC1A},
> + {0, 0x0990, 0x00E7},
> + {0, 0x098E, 0xBC1B},
> + {0, 0x0990, 0x00EF},
> + {0, 0x098E, 0xBC1C},
> + {0, 0x0990, 0x00F7},
> + {0, 0x098E, 0xBC1D},
> + {0, 0x0990, 0x00FF},
> + {0, 0x098E, 0xBC1E},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0xBC1F},
> + {0, 0x0990, 0x001B},
> + {0, 0x098E, 0xBC20},
> + {0, 0x0990, 0x002A},
> + {0, 0x098E, 0xBC21},
> + {0, 0x0990, 0x003E},
> + {0, 0x098E, 0xBC22},
> + {0, 0x0990, 0x005A},
> + {0, 0x098E, 0xBC23},
> + {0, 0x0990, 0x0070},
> + {0, 0x098E, 0xBC24},
> + {0, 0x0990, 0x0081},
> + {0, 0x098E, 0xBC25},
> + {0, 0x0990, 0x0090},
> + {0, 0x098E, 0xBC26},
> + {0, 0x0990, 0x009E},
> + {0, 0x098E, 0xBC27},
> + {0, 0x0990, 0x00AB},
> + {0, 0x098E, 0xBC28},
> + {0, 0x0990, 0x00B6},
> + {0, 0x098E, 0xBC29},
> + {0, 0x0990, 0x00C1},
> + {0, 0x098E, 0xBC2A},
> + {0, 0x0990, 0x00CB},
> + {0, 0x098E, 0xBC2B},
> + {0, 0x0990, 0x00D5},
> + {0, 0x098E, 0xBC2C},
> + {0, 0x0990, 0x00DE},
> + {0, 0x098E, 0xBC2D},
> + {0, 0x0990, 0x00E7},
> + {0, 0x098E, 0xBC2E},
> + {0, 0x0990, 0x00EF},
> + {0, 0x098E, 0xBC2F},
> + {0, 0x0990, 0x00F7},
> + {0, 0x098E, 0xBC30},
> + {0, 0x0990, 0x00FF},
> + {0, 0x098E, 0xBC31},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0xBC32},
> + {0, 0x0990, 0x000D},
> + {0, 0x098E, 0xBC33},
> + {0, 0x0990, 0x0019},
> + {0, 0x098E, 0xBC34},
> + {0, 0x0990, 0x0030},
> + {0, 0x098E, 0xBC35},
> + {0, 0x0990, 0x0056},
> + {0, 0x098E, 0xBC36},
> + {0, 0x0990, 0x0070},
> + {0, 0x098E, 0xBC37},
> + {0, 0x0990, 0x0081},
> + {0, 0x098E, 0xBC38},
> + {0, 0x0990, 0x0090},
> + {0, 0x098E, 0xBC39},
> + {0, 0x0990, 0x009E},
> + {0, 0x098E, 0xBC3A},
> + {0, 0x0990, 0x00AB},
> + {0, 0x098E, 0xBC3B},
> + {0, 0x0990, 0x00B6},
> + {0, 0x098E, 0xBC3C},
> + {0, 0x0990, 0x00C1},
> + {0, 0x098E, 0xBC3D},
> + {0, 0x0990, 0x00CB},
> + {0, 0x098E, 0xBC3E},
> + {0, 0x0990, 0x00D5},
> + {0, 0x098E, 0xBC3F},
> + {0, 0x0990, 0x00DE},
> + {0, 0x098E, 0xBC40},
> + {0, 0x0990, 0x00E7},
> + {0, 0x098E, 0xBC41},
> + {0, 0x0990, 0x00EF},
> + {0, 0x098E, 0xBC42},
> + {0, 0x0990, 0x00F7},
> + {0, 0x098E, 0xBC43},
> + {0, 0x0990, 0x00FF},
> + {0, 0x098E, 0x6865},
> + {0, 0x0990, 0x00E0},
> + {0, 0x098E, 0x6867},
> + {0, 0x0990, 0x00F4},
> + {0, 0x098E, 0x8400},
> + {0, 0x0990, 0x0006},
> + {0, 0x098E, 0xBC4A},
> + {0, 0x0990, 0x007F},
> + {0, 0x098E, 0xBC4B},
> + {0, 0x0990, 0x007F},
> + {0, 0x098E, 0xBC4C},
> + {0, 0x0990, 0x007F},
> + {0, 0x3542, 0x0010},
> + {0, 0x3544, 0x0030},
> + {0, 0x3546, 0x0040},
> + {0, 0x3548, 0x0080},
> + {0, 0x354A, 0x0100},
> + {0, 0x354C, 0x0200},
> + {0, 0x354E, 0x0300},
> + {0, 0x3550, 0x0010},
> + {0, 0x3552, 0x0030},
> + {0, 0x3554, 0x0040},
> + {0, 0x3556, 0x0080},
> + {0, 0x3558, 0x012C},
> + {0, 0x355A, 0x0320},
> + {0, 0x355C, 0x03E8},
> + {0, 0x3560, 0x0040},
> + {0, 0x3562, 0x0020},
> + {0, 0x3564, 0x0040},
> + {0, 0x3566, 0x0010},
> + {0, 0x3568, 0x0008},
> + {0, 0x356A, 0x0004},
> + {0, 0x356C, 0x0004},
> + {0, 0x356E, 0x0004},
> + {0, 0x098E, 0x3C4D},
> + {0, 0x0990, 0x0DAC},
> + {0, 0x098E, 0x3C4F},
> + {0, 0x0990, 0x148A},
> + {0, 0x098E, 0xC911},
> + {0, 0x0990, 0x00C8},
> + {0, 0x098E, 0xC8F4},
> + {0, 0x0990, 0x0004},
> + {0, 0x098E, 0xC8F5},
> + {0, 0x0990, 0x0002},
> + {0, 0x098E, 0x48F6},
> + {0, 0x0990, 0x3B4D},
> + {0, 0x098E, 0x48F8},
> + {0, 0x0990, 0x6380},
> + {0, 0x098E, 0x48FA},
> + {0, 0x0990, 0x9B18},
> + {0, 0x098E, 0x48FC},
> + {0, 0x0990, 0x5D51},
> + {0, 0x098E, 0x48FE},
> + {0, 0x0990, 0xEDE8},
> + {0, 0x098E, 0x4900},
> + {0, 0x0990, 0xE515},
> + {0, 0x098E, 0x4902},
> + {0, 0x0990, 0xBFF4},
> + {0, 0x098E, 0x4904},
> + {0, 0x0990, 0x001E},
> + {0, 0x098E, 0x4906},
> + {0, 0x0990, 0x0026},
> + {0, 0x098E, 0x4908},
> + {0, 0x0990, 0x0033},
> + {0, 0x098E, 0xE84A},
> + {0, 0x0990, 0x0083},
> + {0, 0x098E, 0xE84D},
> + {0, 0x0990, 0x0083},
> + {0, 0x098E, 0xE84C},
> + {0, 0x0990, 0x0080},
> + {0, 0x098E, 0xE84F},
> + {0, 0x0990, 0x0080},
> + {0, 0x098E, 0x8400},
> + {0, 0x0990, 0x0006},
> + {0, 0x098E, 0x48B0},
> + {0, 0x0990, 0x0180},
> + {0, 0x098E, 0x48B2},
> + {0, 0x0990, 0xFF7A},
> + {0, 0x098E, 0x48B4},
> + {0, 0x0990, 0x0018},
> + {0, 0x098E, 0x48B6},
> + {0, 0x0990, 0xFFCA},
> + {0, 0x098E, 0x48B8},
> + {0, 0x0990, 0x017C},
> + {0, 0x098E, 0x48BA},
> + {0, 0x0990, 0xFFCC},
> + {0, 0x098E, 0x48BC},
> + {0, 0x0990, 0x000C},
> + {0, 0x098E, 0x48BE},
> + {0, 0x0990, 0xFF1F},
> + {0, 0x098E, 0x48C0},
> + {0, 0x0990, 0x01E8},
> + {0, 0x098E, 0x48C2},
> + {0, 0x0990, 0x0020},
> + {0, 0x098E, 0x48C4},
> + {0, 0x0990, 0x0044},
> + {0, 0x098E, 0x48C6},
> + {0, 0x0990, 0x0079},
> + {0, 0x098E, 0x48C8},
> + {0, 0x0990, 0xFFAD},
> + {0, 0x098E, 0x48CA},
> + {0, 0x0990, 0xFFE2},
> + {0, 0x098E, 0x48CC},
> + {0, 0x0990, 0x0033},
> + {0, 0x098E, 0x48CE},
> + {0, 0x0990, 0x002A},
> + {0, 0x098E, 0x48D0},
> + {0, 0x0990, 0xFFAA},
> + {0, 0x098E, 0x48D2},
> + {0, 0x0990, 0x0017},
> + {0, 0x098E, 0x48D4},
> + {0, 0x0990, 0x004B},
> + {0, 0x098E, 0x48D6},
> + {0, 0x0990, 0xFFA5},
> + {0, 0x098E, 0x48D8},
> + {0, 0x0990, 0x0015},
> + {0, 0x098E, 0x48DA},
> + {0, 0x0990, 0xFFE2},
> + {0, 0x35A2, 0x0014},
> + {0, 0x098E, 0xC949},
> + {0, 0x0990, 0x0024},
> + {0, 0x35A4, 0x0596},
> + {0, 0x098E, 0xC94A},
> + {0, 0x0990, 0x0062},
> + {0, 0x098E, 0xC948},
> + {0, 0x0990, 0x0006},
> + {0, 0x098E, 0xC914},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0xC915},
> + {0, 0x0990, 0x00FF},
> + {0, 0x098E, 0xE86F},
> + {0, 0x0990, 0x0060},
> + {0, 0x098E, 0xE870},
> + {0, 0x0990, 0x003C},
> + {0, 0x098E, 0xEC6F},
> + {0, 0x0990, 0x0060},
> + {0, 0x098E, 0xEC70},
> + {0, 0x0990, 0x003C},
> + {0, 0x098E, 0xE883},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0xEC83},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0x8400},
> + {0, 0x0990, 0x0006},
> + {0, 0x098E, 0xE885},
> + {0, 0x0990, 0x001E},
> + {0, 0x098E, 0xE886},
> + {0, 0x0990, 0x00D8},
> + {0, 0x098E, 0xEC85},
> + {0, 0x0990, 0x001E},
> + {0, 0x098E, 0xEC86},
> + {0, 0x0990, 0x00D8},
> + {0, 0x098E, 0xE884},
> + {0, 0x0990, 0x005C},
> + {0, 0x098E, 0xEC84},
> + {0, 0x0990, 0x005C},
> + {0, 0x098E, 0x490A},
> + {0, 0x0990, 0x0666},
> + {0, 0x098E, 0x490C},
> + {0, 0x0990, 0x0140},
> + {0, 0x098E, 0x6857},
> + {0, 0x0990, 0x0014},
> + {0, 0x098E, 0x685C},
> + {0, 0x0990, 0x0005},
> + {0, 0x098E, 0x490E},
> + {0, 0x0990, 0x00A4},
> + {0, 0x098E, 0xB43D},
> + {0, 0x0990, 0x0031},
> + {0, 0x098E, 0xB43E},
> + {0, 0x0990, 0x001B},
> + {0, 0x098E, 0xB43F},
> + {0, 0x0990, 0x0028},
> + {0, 0x098E, 0xB440},
> + {0, 0x0990, 0x0003},
> + {0, 0x098E, 0xB441},
> + {0, 0x0990, 0x00CD},
> + {0, 0x098E, 0xB442},
> + {0, 0x0990, 0x0064},
> + {0, 0x098E, 0xB443},
> + {0, 0x0990, 0x000F},
> + {0, 0x098E, 0xB444},
> + {0, 0x0990, 0x0007},
> + {0, 0x098E, 0x300D},
> + {0, 0x0990, 0x000F},
> + {0, 0x098E, 0x3017},
> + {0, 0x0990, 0x0F0F},
> + {0, 0x098E, 0x8400},
> + {0, 0x0990, 0x0006},
> + {0, 0x098E, 0xE81F},
> + {0, 0x0990, 0x0020},
> + {0, 0x098E, 0x68A0},
> + {0, 0x0990, 0x082E},
> + {0, 0x098E, 0x6CA0},
> + {0, 0x0990, 0x082E},
> + {0, 0x098E, 0x70A0},
> + {0, 0x0990, 0x082E},
> + {0, 0x098E, 0x74A0},
> + {0, 0x0990, 0x082E},
> + {0, 0x3C52, 0x082E},
> + {0, 0x098E, 0x488E},
> + {0, 0x0990, 0x0020},
> + {0, 0x098E, 0xECAC},
> + {0, 0x0990, 0x0000}
> +};
> +
> +mt9t111_regs def_regs2[] = {
> + {100, 0x0018, 0x0028},
> + {0, 0x316C, 0x350F},
> + {0, 0x098E, 0x6817},
> + {0, 0x0990, 0x000C},
> + {0, 0x0034, 0x0000}
> +};
> +
> +mt9t111_regs pll_regs1[] = {
> + {0, 0x0014, 0x2425},
> + {0, 0x0014, 0x2425},
> + {0, 0x0014, 0x2145},
> + {0, 0x0010, 0x0219},
> + {0, 0x0012, 0x0090},
> + {0, 0x002A, 0x79DD},
> + {0, 0x0014, 0x2545},
> + {0, 0x0014, 0x2547},
> + {0, 0x0014, 0x3447},
> + {0, 0x0014, 0x3047}
> +};
> +
> +mt9t111_regs pll_regs2[] = {
> + {0, 0x0014, 0x3046},
> + {0, 0x0022, 0x01E0},
> + {0, 0x001E, 0x0707},
> + {0, 0x3B84, 0x011D}
> +};
> +
> +mt9t111_regs bayer_pattern_regs[] = {
> + {0, 0x098E, 0x6807},
> + {0, 0x0990, 0x0100},
> + {0, 0x098E, 0x6809},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0xE88E},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0x6C07},
> + {0, 0x0990, 0x0100},
> + {0, 0x098E, 0x6C09},
> + {0, 0x0990, 0x0000},
> + {0, 0x098E, 0xEC8E},
> + {0, 0x0990, 0x0000}
> +};
> +
> +#endif
> diff --git a/drivers/media/video/mt9t112.c b/drivers/media/video/mt9t112.c
> index 32114a3..aba49e2 100644
> --- a/drivers/media/video/mt9t112.c
> +++ b/drivers/media/video/mt9t112.c
> @@ -24,12 +24,16 @@
> #include <linux/slab.h>
> #include <linux/v4l2-mediabus.h>
> #include <linux/videodev2.h>
> +#include <linux/regulator/consumer.h>
>
> #include <media/mt9t112.h>
> +#include <media/mt9t111.h>
> #include <media/soc_camera.h>
> #include <media/v4l2-chip-ident.h>
> #include <media/v4l2-common.h>
>
> +#include "mt9t111_reg.h"
> +
> /* you can check PLL/clock info */
> /* #define EXT_CLOCK 24000000 */
>
> @@ -88,11 +92,15 @@ struct mt9t112_format {
> struct mt9t112_priv {
> struct v4l2_subdev subdev;
> struct mt9t112_camera_info *info;
> + struct media_pad pad;
I have also extended mt9t112 locally to work with the pad-level API. These
patches have not been published yet, I could try to do that tomorrow.
Maybe you could use that as a basis.
> struct i2c_client *client;
> struct v4l2_rect frame;
> const struct mt9t112_format *format;
> + struct v4l2_mbus_framefmt fmt;
> int model;
> u32 flags;
> + struct regulator *omap3evm_1v8;
> + struct regulator *omap3evm_2v8;
you _certainly_ do not want anything board-specific in generic drivers.
omap3evm has nothing to do here. Further, we shall not break soc-camera
functionality. And soc-camera already handles regulators. We should
discuss this with others and maybe move this somewhere to a more readily
accessible location. Alternatively we could consider a way to call those
functions from outside at least for the initial port to try things out.
> /* for flags */
> #define INIT_DONE (1 << 0)
> #define PCLK_RISING (1 << 1)
> @@ -206,6 +214,33 @@ static int __mt9t112_reg_write(const struct i2c_client *client,
> return ret;
> }
>
> +static int mt9t111_write_regs(struct i2c_client *client,
> + mt9t111_regs *reg_in, int cnt)
We don't want to mix namespaces. Functions and types, that are not
strictly mt9t111-specific, should continue to use the mt9t112 namespace.
But this we have to carefully consider, whether we need it at all -
mt9t112 doesn't need any bulk register writing, and that is also the
common case for Aptina sensors, AFAIK, we don't want to change it...
> +{
> + int err = 0, i;
> + mt9t111_regs *reg = reg_in;
> +
> + for (i = 0; i < cnt; i++) {
> + if (reg->delay_time == 0) {
> + mt9t112_reg_write(err, client, reg->addr, reg->data);
> + } else if (reg->addr != 0 || reg->data != 0) {
> + mt9t112_reg_write(err, client, reg->addr, reg->data);
> + mdelay(reg->delay_time);
> + } else {
> + mdelay(reg->delay_time);
> + }
> + if (err < 0) {
> + dev_warn(&client->dev, "write reg error, addr = 0x%x,"
> + "data = 0x%x\n",
> + reg->addr, reg->data);
> + return err;
> + }
> + reg++;
> + }
> +
> + return err;
> +}
> +
> static int __mt9t112_reg_mask_set(const struct i2c_client *client,
> u16 command,
> u16 mask,
> @@ -733,6 +768,82 @@ static int mt9t112_init_camera(const struct i2c_client *client)
> return ret;
> }
>
> +static int mt9t111_configure(struct v4l2_subdev *subdev)
> +{
> + int i, ret = 0;
> + unsigned short value;
> + struct i2c_client *client = v4l2_get_subdevdata(subdev);
> +
> + mt9t112_reg_write(ret, client, 0x001A, 0x001D);
> + if (ret)
> + goto out;
> +
> + msleep(1);
> +
> + mt9t112_reg_write(ret, client, 0x001A, 0x0018);
> + if (ret)
> + goto out;
> +
> + ret = mt9t111_write_regs(client, pll_regs1,
> + sizeof(pll_regs1) / sizeof(mt9t111_regs));
> + if (ret)
> + goto out;
> +
> + for (i = 0; i < 100; i++) {
> + mt9t112_reg_read(value, client, 0x0014);
> + if ((value & 0x8000) != 0)
> + break;
> + mdelay(2);
> + }
> +
> + ret = mt9t111_write_regs(client, pll_regs2,
> + sizeof(pll_regs2) / sizeof(mt9t111_regs));
I really would prefer to avoid all these...
> + if (ret)
> + goto out;
> +
> + ret = mt9t111_write_regs(client, def_regs1,
> + sizeof(def_regs1) / sizeof(mt9t111_regs));
> + if (ret)
> + goto out;
> +
> + ret = mt9t111_write_regs(client, patch_rev6,
> + sizeof(patch_rev6) / sizeof(mt9t111_regs));
> + if (ret)
> + goto out;
> +
> + ret = mt9t111_write_regs(client, def_regs2,
> + sizeof(def_regs2) / sizeof(mt9t111_regs));
> + if (ret)
> + goto out;
> +
> + /* MCU_ADDRESS [SEQ_CMD] -- refresh mode */
> + mt9t112_reg_write(ret, client, 0x098E, 0x8400);
> + if (ret)
> + goto out;
> + mt9t112_reg_write(ret, client, 0x0990, 0x0006);
> + if (ret)
> + goto out;
> +
> + /* refresh command */
> + mt9t112_reg_write(ret, client, 0x098E, 0x8400);
> + if (ret)
> + goto out;
> + mt9t112_reg_write(ret, client, 0x0990, 0x0005);
> + if (ret)
> + goto out;
> + for (i = 0; i < 100; i++) {
> + mt9t112_reg_write(ret, client, 0x098E, 0x8400);
> + if (ret)
> + break;
> + mt9t112_reg_read(value , client, 0x0990);
> + if (value == 0)
> + break;
> + mdelay(5);
> + }
> +out:
> + return ret;
> +}
> +
> /************************************************************************
> v4l2_subdev_core_ops
> ************************************************************************/
> @@ -775,15 +886,72 @@ static int mt9t112_s_register(struct v4l2_subdev *sd,
> }
> #endif
>
> +static int omap3evm_regulator_ctrl(struct mt9t112_priv *priv, u32 on)
As I said, we have to find a way to consolidate this with soc-camera PM.
> +{
> + if (!(priv->omap3evm_1v8) || !(priv->omap3evm_2v8)) {
> + printk(KERN_ERR "No regulator available\n");
> + return -ENODEV;
> + }
> + if (on) {
> + regulator_enable(priv->omap3evm_1v8);
> + mdelay(1);
> + regulator_enable(priv->omap3evm_2v8);
> + mdelay(50);
> + } else {
> + if (regulator_is_enabled(priv->omap3evm_1v8))
> + regulator_disable(priv->omap3evm_1v8);
> + if (regulator_is_enabled(priv->omap3evm_2v8))
> + regulator_disable(priv->omap3evm_2v8);
> + }
> + return 0;
> +}
> +
> +static int mt9t111_s_power(struct v4l2_subdev *subdev, int on)
> +{
> + struct i2c_client *client = v4l2_get_subdevdata(subdev);
> + struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
> + struct mt9t112_priv *priv = to_mt9t112(client);
> + struct mt9t111_platform_data *pdata;
> + int rval;
> +
> + pdata = (struct mt9t111_platform_data *) icl;
> + if (on) {
> + rval = omap3evm_regulator_ctrl(priv, on);
> + if (rval)
> + goto out;
> +
> + rval = pdata->s_power(subdev, 1);
> + if (rval)
> + goto out;
> +
> + rval = mt9t111_configure(subdev);
> + if (rval) {
> + pdata->s_power(subdev, 0);
> + goto out;
> + }
> +
> + } else {
> + rval = pdata->s_power(subdev, 0);
> + if (rval)
> + goto out;
> + }
> +
> +out:
> + if (rval)
> + v4l_err(client, "Unable to set target power state\n");
> +
> + return rval;
> +}
> +
> static struct v4l2_subdev_core_ops mt9t112_subdev_core_ops = {
> .g_chip_ident = mt9t112_g_chip_ident,
> + .s_power = mt9t111_s_power,
> #ifdef CONFIG_VIDEO_ADV_DEBUG
> - .g_register = mt9t112_g_register,
> - .s_register = mt9t112_s_register,
> + .g_register = mt9t112_g_register,
> + .s_register = mt9t112_s_register,
> #endif
> };
Don't do this.
>
> -
> /************************************************************************
> v4l2_subdev_video_ops
> ************************************************************************/
> @@ -793,51 +961,56 @@ static int mt9t112_s_stream(struct v4l2_subdev *sd, int enable)
> struct mt9t112_priv *priv = to_mt9t112(client);
> int ret = 0;
>
> - if (!enable) {
> - /* FIXME
> - *
> - * If user selected large output size,
> - * and used it long time,
> - * mt9t112 camera will be very warm.
> - *
> - * But current driver can not stop mt9t112 camera.
> - * So, set small size here to solve this problem.
> - */
> - mt9t112_set_a_frame_size(client, VGA_WIDTH, VGA_HEIGHT);
> + if (priv->model == V4L2_IDENT_MT9T111) {
> return ret;
> - }
>
> - if (!(priv->flags & INIT_DONE)) {
> - u16 param = PCLK_RISING & priv->flags ? 0x0001 : 0x0000;
> + } else {
After a "return" you don't need an "else," which would leave the rest of
the function intact.
> + if (!enable) {
> + /* FIXME
> + *
> + * If user selected large output size,
> + * and used it long time,
> + * mt9t112 camera will be very warm.
> + *
> + * But current driver can not stop mt9t112 camera.
> + * So, set small size here to solve this problem.
> + */
> + mt9t112_set_a_frame_size(client, VGA_WIDTH, VGA_HEIGHT);
> + return ret;
> + }
>
> - ECHECKER(ret, mt9t112_init_camera(client));
> + if (!(priv->flags & INIT_DONE)) {
> + u16 param = PCLK_RISING & priv->flags ? 0x0001 : 0x0000;
>
> - /* Invert PCLK (Data sampled on falling edge of pixclk) */
> - mt9t112_reg_write(ret, client, 0x3C20, param);
> + ECHECKER(ret, mt9t112_init_camera(client));
>
> - mdelay(5);
> + /* Invert PCLK (Data sampled on falling edge of pixclk) */
> + mt9t112_reg_write(ret, client, 0x3C20, param);
>
> - priv->flags |= INIT_DONE;
> - }
> + mdelay(5);
>
> - mt9t112_mcu_write(ret, client, VAR(26, 7), priv->format->fmt);
> - mt9t112_mcu_write(ret, client, VAR(26, 9), priv->format->order);
> - mt9t112_mcu_write(ret, client, VAR8(1, 0), 0x06);
> + priv->flags |= INIT_DONE;
> + }
>
> - mt9t112_set_a_frame_size(client,
> - priv->frame.width,
> - priv->frame.height);
> + mt9t112_mcu_write(ret, client, VAR(26, 7), priv->format->fmt);
> + mt9t112_mcu_write(ret, client, VAR(26, 9), priv->format->order);
> + mt9t112_mcu_write(ret, client, VAR8(1, 0), 0x06);
>
> - ECHECKER(ret, mt9t112_auto_focus_trigger(client));
> + mt9t112_set_a_frame_size(client,
> + priv->frame.width,
> + priv->frame.height);
>
> - dev_dbg(&client->dev, "format : %d\n", priv->format->code);
> - dev_dbg(&client->dev, "size : %d x %d\n",
> - priv->frame.width,
> - priv->frame.height);
> + ECHECKER(ret, mt9t112_auto_focus_trigger(client));
>
> - CLOCK_INFO(client, EXT_CLOCK);
> + dev_dbg(&client->dev, "format : %d\n", priv->format->code);
> + dev_dbg(&client->dev, "size : %d x %d\n",
> + priv->frame.width,
> + priv->frame.height);
>
> - return ret;
> + CLOCK_INFO(client, EXT_CLOCK);
> +
> + return ret;
> + }
> }
>
> static int mt9t112_set_params(struct mt9t112_priv *priv,
> @@ -1019,11 +1192,60 @@ static struct v4l2_subdev_video_ops mt9t112_subdev_video_ops = {
> };
>
> /************************************************************************
> + v4l2_subdev_pad_ops
> +************************************************************************/
> +static int mt9t111_get_pad_format(struct v4l2_subdev *subdev,
> + struct v4l2_subdev_fh *fh,
> + struct v4l2_subdev_format *fmt)
> +{
> + struct i2c_client *client = v4l2_get_subdevdata(subdev);
> + struct mt9t112_priv *priv = to_mt9t112(client);
> +
> + fmt->format = priv->fmt;
> + return 0;
> +}
> +
> +static int mt9t111_set_pad_format(struct v4l2_subdev *subdev,
> + struct v4l2_subdev_fh *fh,
> + struct v4l2_subdev_format *fmt)
> +{
> + int i;
> + struct i2c_client *client = v4l2_get_subdevdata(subdev);
> + struct mt9t112_priv *priv = to_mt9t112(client);
> +
> + for (i = 0; i < ARRAY_SIZE(mt9t112_cfmts); i++) {
> + if (fmt->format.code == mt9t112_cfmts[i].code)
> + goto fmt_found;
> + }
> + if (i >= ARRAY_SIZE(mt9t112_cfmts))
> + return -EINVAL;
> +
> +fmt_found:
> + /*
> + * Only VGA resolution supported
> + */
We should re-use the driver functionality. BTW, I wasn't able to find an
mt9t112 datasheet on the internet, but I did manage to find an mt9t111
datasheet. Maybe you could find it too and use to get rid of all the
register magic, and also to replace existing mt9t112 register addresses
with symbolic names, at least where registers coincide.
> + fmt->format.width = VGA_WIDTH;
> + fmt->format.height = VGA_HEIGHT;
> + fmt->format.field = V4L2_FIELD_NONE;
> + fmt->format.colorspace = V4L2_COLORSPACE_JPEG;
> +
> + priv->fmt = fmt->format;
> +
> + return 0;
> +}
> +
> +static const struct v4l2_subdev_pad_ops mt9t111_pad_ops = {
> + .get_fmt = mt9t111_get_pad_format,
> + .set_fmt = mt9t111_set_pad_format,
> +};
> +
> +/************************************************************************
> i2c driver
> ************************************************************************/
> static struct v4l2_subdev_ops mt9t112_subdev_ops = {
> .core = &mt9t112_subdev_core_ops,
> .video = &mt9t112_subdev_video_ops,
> + .pad = &mt9t111_pad_ops,
> };
>
> static int mt9t112_camera_probe(struct i2c_client *client)
> @@ -1089,6 +1311,32 @@ static int mt9t112_probe(struct i2c_client *client,
> /* Cannot fail: using the default supported pixel code */
> mt9t112_set_params(priv, &rect, V4L2_MBUS_FMT_UYVY8_2X8);
>
> + if (priv->model == V4L2_IDENT_MT9T111) {
> + priv->omap3evm_1v8 = regulator_get(NULL, "vio_1v8");
> + if (IS_ERR(priv->omap3evm_1v8)) {
> + printk(KERN_ERR "vio_1v8 regulator missing\n");
> + ret = PTR_ERR(priv->omap3evm_1v8);
Same - unify PM with soc-camera.
> + goto err_1;
> + }
> + priv->omap3evm_2v8 = regulator_get(NULL, "cam_2v8");
> + if (IS_ERR(priv->omap3evm_2v8)) {
> + printk(KERN_ERR "cam_2v8 regulator missing\n");
> + ret = PTR_ERR(priv->omap3evm_2v8);
> + goto err_2;
> + }
> +
> + priv->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
> + priv->pad.flags = MEDIA_PAD_FL_SOURCE;
> + ret = media_entity_init(&priv->subdev.entity, 1, &priv->pad, 0);
> + if (!ret)
> + return 0;
> + kfree(priv);
> +err_2:
> + regulator_put(priv->omap3evm_2v8);
> +err_1:
> + regulator_put(priv->omap3evm_1v8);
> + }
> +
> return ret;
> }
>
> diff --git a/include/media/mt9t111.h b/include/media/mt9t111.h
> new file mode 100644
> index 0000000..372dc0d
> --- /dev/null
> +++ b/include/media/mt9t111.h
> @@ -0,0 +1,45 @@
> +/*
> + * include/media/mt9t111.h
> + *
> + * mt9t111 sensor driver
> + *
> + * Copyright (C) 2009 Leopard Imaging
> + *
> + * This file is licensed under the terms of the GNU General Public License
> + * version 2. This program is licensed "as is" without any warranty of any
> + * kind, whether express or implied.
> + */
> +
> +#ifndef MT9T111_H
> +#define MT9T111_H
> +
> +struct v4l2_subdev;
> +
> +/*
> + * Defines and Macros and globals
> + */
> +#define MT9T111_MODULE_NAME "mt9t112"
> +
> +/*i2c adress for MT9T111*/
> +#define MT9T111_I2C_ADDR (0x78 >> 1)
> +
> +#define MT9T111_CLK_MAX (96000000) /* 96MHz */
> +#define MT9T111_CLK_MIN (6000000) /* 6Mhz */
> +
> +#define MT9T111_I2C_CONFIG (1)
> +#define I2C_ONE_BYTE_TRANSFER (1)
> +#define I2C_TWO_BYTE_TRANSFER (2)
> +#define I2C_THREE_BYTE_TRANSFER (3)
> +#define I2C_FOUR_BYTE_TRANSFER (4)
> +#define I2C_TXRX_DATA_MASK (0x00FF)
> +#define I2C_TXRX_DATA_MASK_UPPER (0xFF00)
> +#define I2C_TXRX_DATA_SHIFT (8)
I don't think you need parenthesis around simple numeric constants.
> +
> +struct mt9t111_platform_data {
> + int (*s_power) (struct v4l2_subdev *subdev, u32 on);
> + int (*set_xclk) (struct v4l2_subdev *subdev, u32 hz);
> + int (*configure_interface) (struct v4l2_subdev *subdev, u32 pixclk);
> +};
> +
> +#endif /* ifndef MT9T111 */
> +
> --
> 1.7.0.4
>
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
^ permalink raw reply
* [PATCH v7 00/26] gpio/omap: driver cleanup and fixes
From: DebBarma, Tarun Kanti @ 2011-09-27 23:42 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <87wrcu2bvl.fsf@ti.com>
On Tue, Sep 27, 2011 at 9:52 PM, Kevin Hilman <khilman@ti.com> wrote:
> "DebBarma, Tarun Kanti" <tarun.kanti@ti.com> writes:
>
>> On Tue, Sep 27, 2011 at 4:40 AM, Kevin Hilman <khilman@ti.com> wrote:
>>> "DebBarma, Tarun Kanti" <tarun.kanti@ti.com> writes:
>>>
>>> [...]
>>>
>>>> As pointed out by Kevin, debounce clock was not getting disabled.
>>>> In my testing I was somehow grepping CORE power domain instead
>>>> of PER power domain and hence missed it. The fix for the debounce
>>>> clock issue is at the end of the email.
>>>>
>>>> - Have re-based the for_3.2/gpio-cleanup branch against 3.1-rc6.
>>>> - Dropped [PATCH 26/26] gpio/omap: add dbclk aliases for all gpio modules
>>>> as suggested by Kevin since it's already taken care by hwmod.
>>>> - Added the debounce clock fix in the end.
>>>
>>> That debounce fix definitely makes things look better, but it's not
>>> solving the problem...
>>>
>>>> With above, PER is hitting low power state in Suspend and Idle path.
>>>>
>>>> Have pushed a branch at below URL with mentioned changes.
>>>> git://gitorious.org/omap-sw-develoment/linux-omap-dev.git
>>>> for_3.2/kevin/gpio-cleanup
>>>
>>> I tested your branch on my 3430/n900 and PER is still not hitting
>>> retention. ?Setting all debounce values in the board file to zero using
>>> the patch below[1] makes PER hit retention again.
>>>
>>> Assuming you don't have an n900 to test with, I suggest you just copy
>>> the GPIO keys init from board-rx51-peripherals.c (or some of it) into
>>> the board file you are testing with.
>>>
>>> The problem is most likely be related to having more than one GPIO in a
>>> bank with debounce enabled, or more than one bank with GPIOs enabled and
>>> your current test is not be catching it.
>>>
>> As per commit c8c9fda506945 {OMAP: PM: disable idle on suspend for
>> GPIO and UART}, the gpio code needs to be fixed once GPIO driver is
>> run-time adapted.
>
> Great, good catch.
>
>> So I did below change as per the commit and now suspend is working
>> fine even with board files change for debounce functionality. So the
>> last series + below one line change is whats needed for suspend to
>> work. Can you please see if this does help on your board ?
>
> Yeah, with your patch, PER is hitting retention in suspend on my
> 3430/n900.
>
>> I am not finished my idle testing yet but just reporting the suspend
>> results.
>
> For me, PER is not hitting retention on idle.
I am working on this right now.
>
> Also, your repost of v7 doesn't included any of the comments I made on
> it yesterday.
That's right. By the time I received the comments the series was already posted.
Anyways, I will include them along with the PER retention issue in the
Idle path.
--
Tarun
>
> Kevin
>
^ permalink raw reply
* [PATCH v2 00/16] Switch GIC users (and omap2plus) to CONFIG_MULTI_IRQ_HANDLER
From: Tony Lindgren @ 2011-09-27 23:53 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317034955-1029-1-git-send-email-marc.zyngier@arm.com>
Hi Marc,
* Marc Zyngier <marc.zyngier@arm.com> [110926 07:02]:
> In order to support multiple primary interrupt controllers in the same
> image, it is necessary to use the MULTI_IRQ_HANDLER config option.
>
> This patch series makes a first step in that direction by:
> - having the GIC code to provides a global handler,
> - make GIC users to provide this handler from their machine descriptor.
>
> A side effect of this is that it forces OMAP2/3 platforms to be
> converted too in order to preserve the MULTI_OMAP feature. This leads
> to a certain simplification of the interrupt handling for the
> OMAP2/3/4 platforms.
That's nice :)
> The primary IRQ handlers have been written in C, and the performance
> degradation is hardly noticeable. Should some tests reveal a major
> increase in latency, it is always possible to restore the ASM version.
>
> This series has been tested on VE (A9, A5, A15), PB11MP, Panda, IGEPv2
> and Harmony. Patches against next-20110926 plus my PPI series.
I gave this series a quick try, it works except with all the patches
applied omap2plus_defconfig will failt to boot on omap4. It seems that
the issue is somewhere in the GIC related patches, the last one just
enables the MULTI_IRQ..
Care to give it a try on your Panda and see if omap2plus_defconfig
works for you with this series?
Looks like disabling CONFIG_SMP made it omap4 boot again.
Regards,
Tony
^ permalink raw reply
* [PATCH 1/2] drivers: create a pin control subsystem v7
From: Stephen Warren @ 2011-09-28 0:08 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <CACRpkdZiQX0whbC85dN0JmNB=sgWiZ=WiUwkBdrHzFC4awH8YA@mail.gmail.com>
Linus Walleij wrote at Tuesday, September 27, 2011 1:51 AM:
> On Wed, Sep 21, 2011 at 9:45 PM, Stephen Warren <swarren@nvidia.com> wrote:
> > Linus Walleij wrote at Wednesday, September 21, 2011 3:17 AM:
> >> To abstract things the stuff we can do with the group should be
> >> something enumerated too. So:
> >>
> >> pinctrl_config_group(const char *pinctrl_device, const char *group,
> >> const char *mode);
> >> pinctrl_config_pin(const char *pinctrl_device, int pin, const char *mode);
> >>
> >> So the driver need an API to enumerate pin and group modes.
> >>
> >> I might want to save this thing for post-merge of the basic API and
> >> pinmux stuff though so we don't try to push too much upfront
> >> design at once.
> >
> > Yes, adding in a replacement _config API can certainly be a later patch.
>
> If I'm efficient enough we might get that add-on before the v3.2
> merge window, I'll iterate that patch separately though.
>
> > One comment on the API above: I think you want "mode" (or "setting"?)
> > /and/ a value parameter; Tegra's pull strength definition for example
> > is:
> >
> > enum tegra_pull_strength {
> > ? ? ? ?TEGRA_PULL_0 = 0,
> > ? ? ? ?TEGRA_PULL_1,
> > // ... (every value in between)
> > ? ? ? ?TEGRA_PULL_30,
> > ? ? ? ?TEGRA_PULL_31,
> > ? ? ? ?TEGRA_MAX_PULL,
> > };
> >
> > And it seems better to represent that as ("pull", 0) ... ("pull", 31) than
> > "pull0" .. "pull31" such that the value needs to be parsed out of the "mode"
> > string somehow by the driver.
>
> OK so we might want some public defintion of "things you can do"
> with pins, then an opaque parameter.
>
> like:
>
> #define PINCTRL_PULL "pull"
> #define PINCTRL_BIAS "bias"
> #define PINCTRL_LOADCAP "load-capacitance"
> #define PINCTRL_DRIVE "drive"
Yes although Tegra has quite a few more weird options than that; I'm not
sure exactly how many of the options that Tegra supports would be useful
for other SoCs, or what the best way to represent all the device-specific
knobs is. I guess we need another survey of a bunch of SoCs like you did
when designing the pinmux API.
> ...but then it's just simple enumerators, and we might be better off
> with a simple enum after all:
>
> enum pinctrl_pin_ops {
> PINCTRL_PULL,
> PINCTRL_BIAS,
> PINCTRL_LOADCAP,
> PINCTRL_DRIVE,
> }
>
> Surely the device tree will have to translate that enum into strings
> (I guess? Sorry for my low DT competence) but that is more of a
> DT pecularity and can be kept in the DT pin control parser?
DT as a data format can handle strings or integers just fine. However,
there's currently no support for named constants (i.e. #defines) in the
device-tree source format, so strings end up being a lot more self-
documenting. Whatever the DT format ends up being, we can certainly
map from whatever-dt-contains to whatever-Linux-APIs-need inside
whatever kernel function is written to extract the data from DT.
--
nvpublic
^ permalink raw reply
* [PATCH 2/2 v7] pinmux: add a driver for the U300 pinmux
From: Stephen Warren @ 2011-09-28 0:15 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <CACRpkdbiWUFPfF9vKV5YpSW68ZTdjwb8NhWZ_9WDoY5Q+aVfvQ@mail.gmail.com>
Linus Walleij wrote at Tuesday, September 27, 2011 2:01 AM:
> On Wed, Sep 21, 2011 at 9:39 PM, Stephen Warren <swarren@nvidia.com> wrote:
> > Linus Walleij wrote at Wednesday, September 21, 2011 2:25 AM:
> >> On Wed, Sep 21, 2011 at 12:15 AM, Stephen Warren <swarren@nvidia.com> wrote:
> >> > Linus Walleij wrote at Friday, September 16, 2011 6:14 AM:
> >> >> + ? ? for (i = 0; i < ARRAY_SIZE(u300_mux_hogs); i++) {
> >> >> + ? ? ? ? ? ? struct pinmux *pmx;
> >> >> + ? ? ? ? ? ? int ret;
> >> >> +
> >> >> + ? ? ? ? ? ? pmx = pinmux_get(u300_mux_hogs[i].dev, NULL);
> >> >> + ? ? ? ? ? ? if (IS_ERR(pmx)) {
> >> >> + ? ? ? ? ? ? ? ? ? ? pr_err("u300: could not get pinmux hog %s\n",
> >> >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ?u300_mux_hogs[i].name);
> >> >> + ? ? ? ? ? ? ? ? ? ? continue;
> >> >> + ? ? ? ? ? ? }
> >> >> + ? ? ? ? ? ? ret = pinmux_enable(pmx);
> >> >> + ? ? ? ? ? ? if (ret) {
> >> >> + ? ? ? ? ? ? ? ? ? ? pr_err("u300: could enable pinmux hog %s\n",
> >> >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ?u300_mux_hogs[i].name);
> >> >> + ? ? ? ? ? ? ? ? ? ? continue;
> >> >> + ? ? ? ? ? ? }
> >> >> + ? ? ? ? ? ? u300_mux_hogs[i].pmx = pmx;
> >> >> + ? ? }
> >> >> + ? ? return 0;
> >> >> +}
> >> >> +subsys_initcall(u300_pinmux_fetch);
> >> >
> >> > Why not just have the pinmux core support hogging on non-"system" mapping
> >> > entries; then everything I quoted above except u300_pinmux_map[] could
> >> > be deleted, and the "hog" flag set on the last 3 u300_pinmux_map[] entries.
> >>
> >> Very good question, luckily I have a good answer.
> >>
> >> There is no way for the pinmux core to traverse the system and look
> >> up the apropriate struct device * pointers.
> >
> > It's unclear to me why that would be needed.
> >
> > For non-system mappings, either the device-driver in question will be
> > get'ing and enabling them (this case isn't relevant to this discussion),
> > or they'll be hogged. In the hog case, I doubt anything would ever want
> > to disable them and switch the device to a different mapping entry; if
> > that were the case, the entries shouldn't be hogged, but get/enabled by
> > the device anyway. Hence, I don't see the need for an activation of a
> > hog'd non-system mapping entry to care about the device fields that are
> > in the mapping table at all; they could just be ignored couldn't they?
>
> I don't think so, atleast not in this case. I think it is helpful for the system
> to know which device is related to the specific hog, so it turns up in
> debugfs etc "aha, it is hogged for that device" etc. Not doing that
> makes the subsystem loose relevant information.
>
> So for that reason I prefer to pass in the relevant struct device *
> pointers, atleast when they're readily available as in this boardfile.
>
> If they are not available, or hard to get at, we could just redefine
> them as system mappings and remove the device fields, but
> in this case I'd say let's keep it around.
Yes, it makes perfect sense to show this in debugfs.
But can't debugfs just get its information from the device name field in
the mapping table? I'm not sure why the need to use that information for
debugfs prevents the having entries with both the hog flag set and a
device name set?
--
nvpublic
^ permalink raw reply
* [PATCH v2 00/16] Switch GIC users (and omap2plus) to CONFIG_MULTI_IRQ_HANDLER
From: Tony Lindgren @ 2011-09-28 0:53 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20110927235309.GP6324@atomide.com>
* Tony Lindgren <tony@atomide.com> [110927 16:19]:
>
> * Marc Zyngier <marc.zyngier@arm.com> [110926 07:02]:
> >
> > This series has been tested on VE (A9, A5, A15), PB11MP, Panda, IGEPv2
> > and Harmony. Patches against next-20110926 plus my PPI series.
>
> I gave this series a quick try, it works except with all the patches
> applied omap2plus_defconfig will failt to boot on omap4. It seems that
> the issue is somewhere in the GIC related patches, the last one just
> enables the MULTI_IRQ..
>
> Care to give it a try on your Panda and see if omap2plus_defconfig
> works for you with this series?
>
> Looks like disabling CONFIG_SMP made it omap4 boot again.
Nevermind, looks like I was missing the PPI series.. No wonder
I had to do some rebasing to get the patches to apply..
Booting just fine now, will ack some patches separately. Gave
the PPI + MULTI_IRQ series a quick boot test on n800, 2430sdp,
n900, zoom3 and blaze. So that pretty much covers omap2, 3 & 4.
Regards,
Tony
^ permalink raw reply
* [PATCH v3 2/3] ARM: gic: consolidate PPI handling
From: Tony Lindgren @ 2011-09-28 0:59 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1316793788-14500-3-git-send-email-marc.zyngier@arm.com>
* Marc Zyngier <marc.zyngier@arm.com> [110923 12:03]:
> PPI handling is a bit of an odd beast. It uses its own low level
> handling code and is hardwired to the local timers (hence lacking
> a registration interface).
>
> Instead, switch the low handling to the normal SPI handling code.
> PPIs are handled by the handle_percpu_devid_irq flow.
>
> This also allows the removal of some duplicated code.
>
> Cc: Kukjin Kim <kgene.kim@samsung.com>
> Cc: David Brown <davidb@codeaurora.org>
> Cc: Bryan Huntsman <bryanh@codeaurora.org>
> Cc: Tony Lindgren <tony@atomide.com>
> Cc: Paul Mundt <lethal@linux-sh.org>
> Cc: Magnus Damm <magnus.damm@gmail.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
For the omap changes:
Tested-by: Tony Lindgren <tony@atomide.com>
(Sorry had to dig this one from the archive, looks like
the Cc addresses might be left out)
^ permalink raw reply
* [PATCH v3 0/3] Add support for tegra2 based ventana board
From: Peter De Schrijver @ 2011-09-28 0:59 UTC (permalink / raw)
To: linux-arm-kernel
This patch set adds support for the tegra2 based ventana development board.
Boot tested on ventana.
Peter De Schrijver (3):
arm/tegra: prepare Seaboard pinmux code for derived boards
arm/tegra: add support for ventana pinmuxing
arm/tegra: device tree support for ventana board
arch/arm/boot/dts/tegra-ventana.dts | 32 ++++++++++++++
arch/arm/mach-tegra/Kconfig | 6 +++
arch/arm/mach-tegra/Makefile | 1 +
arch/arm/mach-tegra/Makefile.boot | 1 +
arch/arm/mach-tegra/board-dt.c | 5 ++-
arch/arm/mach-tegra/board-seaboard-pinmux.c | 63 ++++++++++++++++++++++++---
6 files changed, 101 insertions(+), 7 deletions(-)
create mode 100644 arch/arm/boot/dts/tegra-ventana.dts
^ permalink raw reply
* [PATCH v3 1/3] arm/tegra: prepare Seaboard pinmux code for derived boards
From: Peter De Schrijver @ 2011-09-28 0:59 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317171563-14559-1-git-send-email-pdeschrijver@nvidia.com>
This patch splits out the common part of pinmux and GPIO initialization for
seaboard and derived boards. This code is based on work done by Jong Kim
<jongk@nvidia.com>.
Change-Id: I861db37c727a7118d38885c4bcb6f4acce3d4133
Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
---
arch/arm/mach-tegra/board-seaboard-pinmux.c | 14 ++++++++++----
1 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/arch/arm/mach-tegra/board-seaboard-pinmux.c b/arch/arm/mach-tegra/board-seaboard-pinmux.c
index 74f78b7..b31c765 100644
--- a/arch/arm/mach-tegra/board-seaboard-pinmux.c
+++ b/arch/arm/mach-tegra/board-seaboard-pinmux.c
@@ -1,5 +1,6 @@
/*
- * Copyright (C) 2010 NVIDIA Corporation
+ * Copyright (C) 2010,2011 NVIDIA Corporation
+ * Copyright (C) 2011 Google, Inc.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
@@ -160,7 +161,7 @@ static __initdata struct tegra_pingroup_config seaboard_pinmux[] = {
-static struct tegra_gpio_table gpio_table[] = {
+static struct tegra_gpio_table common_gpio_table[] = {
{ .gpio = TEGRA_GPIO_SD2_CD, .enable = true },
{ .gpio = TEGRA_GPIO_SD2_WP, .enable = true },
{ .gpio = TEGRA_GPIO_SD2_POWER, .enable = true },
@@ -171,12 +172,17 @@ static struct tegra_gpio_table gpio_table[] = {
{ .gpio = TEGRA_GPIO_USB1, .enable = true },
};
-void __init seaboard_pinmux_init(void)
+static void __init seaboard_common_pinmux_init(void)
{
tegra_pinmux_config_table(seaboard_pinmux, ARRAY_SIZE(seaboard_pinmux));
tegra_drive_pinmux_config_table(seaboard_drive_pinmux,
ARRAY_SIZE(seaboard_drive_pinmux));
- tegra_gpio_config(gpio_table, ARRAY_SIZE(gpio_table));
+ tegra_gpio_config(common_gpio_table, ARRAY_SIZE(common_gpio_table));
+}
+
+void __init seaboard_pinmux_init(void)
+{
+ seaboard_common_pinmux_init();
}
--
1.7.0.4
^ permalink raw reply related
* [PATCH v3 2/3] arm/tegra: add support for ventana pinmuxing
From: Peter De Schrijver @ 2011-09-28 0:59 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317171563-14559-1-git-send-email-pdeschrijver@nvidia.com>
Add support for ventana pinmuxing as a seaboard derivative. This is a cut down
version of work done by Jong Kim <jongk@nvidia.com>.
Change-Id: I54bbf7a507dac193fa88f339d3e47f3d473dfc96
Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
---
arch/arm/mach-tegra/Makefile | 1 +
arch/arm/mach-tegra/board-seaboard-pinmux.c | 49 +++++++++++++++++++++++++-
2 files changed, 48 insertions(+), 2 deletions(-)
diff --git a/arch/arm/mach-tegra/Makefile b/arch/arm/mach-tegra/Makefile
index f11b910..91a07e1 100644
--- a/arch/arm/mach-tegra/Makefile
+++ b/arch/arm/mach-tegra/Makefile
@@ -31,6 +31,7 @@ obj-${CONFIG_MACH_SEABOARD} += board-seaboard-pinmux.o
obj-${CONFIG_MACH_TEGRA_DT} += board-dt.o
obj-${CONFIG_MACH_TEGRA_DT} += board-harmony-pinmux.o
+obj-${CONFIG_MACH_TEGRA_DT} += board-seaboard-pinmux.o
obj-${CONFIG_MACH_TRIMSLICE} += board-trimslice.o
obj-${CONFIG_MACH_TRIMSLICE} += board-trimslice-pinmux.o
diff --git a/arch/arm/mach-tegra/board-seaboard-pinmux.c b/arch/arm/mach-tegra/board-seaboard-pinmux.c
index b31c765..b62b04d 100644
--- a/arch/arm/mach-tegra/board-seaboard-pinmux.c
+++ b/arch/arm/mach-tegra/board-seaboard-pinmux.c
@@ -158,8 +158,26 @@ static __initdata struct tegra_pingroup_config seaboard_pinmux[] = {
{TEGRA_PINGROUP_XM2D, TEGRA_MUX_NONE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
};
-
-
+static __initdata struct tegra_pingroup_config ventana_pinmux[] = {
+ {TEGRA_PINGROUP_DAP3, TEGRA_MUX_DAP3, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
+ {TEGRA_PINGROUP_DDC, TEGRA_MUX_RSVD2, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_DTA, TEGRA_MUX_VI, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_DTB, TEGRA_MUX_VI, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_DTC, TEGRA_MUX_VI, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_DTD, TEGRA_MUX_VI, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_GMD, TEGRA_MUX_SFLASH, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
+ {TEGRA_PINGROUP_LPW0, TEGRA_MUX_RSVD4, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_LPW2, TEGRA_MUX_RSVD4, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_LSC1, TEGRA_MUX_RSVD4, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_LSCK, TEGRA_MUX_RSVD4, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
+ {TEGRA_PINGROUP_LSDA, TEGRA_MUX_RSVD4, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
+ {TEGRA_PINGROUP_PTA, TEGRA_MUX_RSVD2, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_SLXC, TEGRA_MUX_SDIO3, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_SLXK, TEGRA_MUX_SDIO3, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_SPIA, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
+ {TEGRA_PINGROUP_SPIC, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
+ {TEGRA_PINGROUP_SPIG, TEGRA_MUX_SPI2_ALT, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
+};
static struct tegra_gpio_table common_gpio_table[] = {
{ .gpio = TEGRA_GPIO_SD2_CD, .enable = true },
@@ -172,6 +190,26 @@ static struct tegra_gpio_table common_gpio_table[] = {
{ .gpio = TEGRA_GPIO_USB1, .enable = true },
};
+static void __init update_pinmux(struct tegra_pingroup_config *newtbl, int size)
+{
+ int i, j;
+ struct tegra_pingroup_config *new_pingroup, *base_pingroup;
+
+ /* Update base seaboard pinmux table with secondary board
+ * specific pinmux table table.
+ */
+ for (i = 0; i < size; i++) {
+ new_pingroup = &newtbl[i];
+ for (j = 0; j < ARRAY_SIZE(seaboard_pinmux); j++) {
+ base_pingroup = &seaboard_pinmux[j];
+ if (new_pingroup->pingroup == base_pingroup->pingroup) {
+ *base_pingroup = *new_pingroup;
+ break;
+ }
+ }
+ }
+}
+
static void __init seaboard_common_pinmux_init(void)
{
tegra_pinmux_config_table(seaboard_pinmux, ARRAY_SIZE(seaboard_pinmux));
@@ -186,3 +224,10 @@ void __init seaboard_pinmux_init(void)
{
seaboard_common_pinmux_init();
}
+
+void __init ventana_pinmux_init(void)
+{
+ update_pinmux(ventana_pinmux, ARRAY_SIZE(ventana_pinmux));
+ seaboard_common_pinmux_init();
+}
+
--
1.7.0.4
^ permalink raw reply related
* [PATCH v3 3/3] arm/tegra: device tree support for ventana board
From: Peter De Schrijver @ 2011-09-28 0:59 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317171563-14559-1-git-send-email-pdeschrijver@nvidia.com>
Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
---
arch/arm/boot/dts/tegra-ventana.dts | 32 ++++++++++++++++++++++++++++++++
arch/arm/mach-tegra/Kconfig | 6 ++++++
arch/arm/mach-tegra/Makefile.boot | 1 +
arch/arm/mach-tegra/board-dt.c | 5 ++++-
4 files changed, 43 insertions(+), 1 deletions(-)
create mode 100644 arch/arm/boot/dts/tegra-ventana.dts
diff --git a/arch/arm/boot/dts/tegra-ventana.dts b/arch/arm/boot/dts/tegra-ventana.dts
new file mode 100644
index 0000000..9b29a62
--- /dev/null
+++ b/arch/arm/boot/dts/tegra-ventana.dts
@@ -0,0 +1,32 @@
+/dts-v1/;
+
+/memreserve/ 0x1c000000 0x04000000;
+/include/ "tegra20.dtsi"
+
+/ {
+ model = "NVIDIA Tegra2 Ventana evaluation board";
+ compatible = "nvidia,ventana", "nvidia,tegra20";
+
+ chosen {
+ bootargs = "vmalloc=192M video=tegrafb console=ttyS0,115200n8 root=/dev/ram rdinit=/sbin/init";
+ };
+
+ memory {
+ reg = < 0x00000000 0x40000000 >;
+ };
+
+ serial at 70006300 {
+ clock-frequency = < 216000000 >;
+ };
+
+ sdhci at c8000400 {
+ cd-gpios = <&gpio 69 0>; /* gpio PI5 */
+ wp-gpios = <&gpio 57 0>; /* gpio PH1 */
+ power-gpios = <&gpio 155 0>; /* gpio PT3 */
+ };
+
+ sdhci at c8000600 {
+ power-gpios = <&gpio 70 0>; /* gpio PI6 */
+ support-8bit;
+ };
+};
diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig
index d82ebab..91aff7c 100644
--- a/arch/arm/mach-tegra/Kconfig
+++ b/arch/arm/mach-tegra/Kconfig
@@ -69,6 +69,12 @@ config MACH_WARIO
help
Support for the Wario version of Seaboard
+config MACH_VENTANA
+ bool "Ventana board"
+ select MACH_TEGRA_DT
+ help
+ Support for the nVidia Ventana development platform
+
choice
prompt "Low-level debug console UART"
default TEGRA_DEBUG_UART_NONE
diff --git a/arch/arm/mach-tegra/Makefile.boot b/arch/arm/mach-tegra/Makefile.boot
index 5e870d2..bd12c9f 100644
--- a/arch/arm/mach-tegra/Makefile.boot
+++ b/arch/arm/mach-tegra/Makefile.boot
@@ -4,3 +4,4 @@ initrd_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00800000
dtb-$(CONFIG_MACH_HARMONY) += tegra-harmony.dtb
dtb-$(CONFIG_MACH_SEABOARD) += tegra-seaboard.dtb
+dtb-$(CONFIG_MACH_VENTANA) += tegra-ventana.dtb
diff --git a/arch/arm/mach-tegra/board-dt.c b/arch/arm/mach-tegra/board-dt.c
index 9f47e04..5885102 100644
--- a/arch/arm/mach-tegra/board-dt.c
+++ b/arch/arm/mach-tegra/board-dt.c
@@ -47,7 +47,7 @@
void harmony_pinmux_init(void);
void seaboard_pinmux_init(void);
-
+void ventana_pinmux_init(void);
struct of_dev_auxdata tegra20_auxdata_lookup[] __initdata = {
OF_DEV_AUXDATA("nvidia,tegra20-sdhci", TEGRA_SDMMC1_BASE, "sdhci-tegra.0", NULL),
@@ -95,6 +95,8 @@ static void __init tegra_dt_init(void)
harmony_pinmux_init();
else if (of_machine_is_compatible("nvidia,seaboard"))
seaboard_pinmux_init();
+ else if (of_machine_is_compatible("nvidia,ventana"))
+ ventana_pinmux_init();
/*
* Finished with the static registrations now; fill in the missing
@@ -106,6 +108,7 @@ static void __init tegra_dt_init(void)
static const char * tegra_dt_board_compat[] = {
"nvidia,harmony",
"nvidia,seaboard",
+ "nvidia,ventana",
NULL
};
--
1.7.0.4
^ permalink raw reply related
* [PATCH v2 01/16] ARM: Make global handler and CONFIG_MULTI_IRQ_HANDLER mutually exclusive
From: Tony Lindgren @ 2011-09-28 1:00 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317034955-1029-2-git-send-email-marc.zyngier@arm.com>
* Marc Zyngier <marc.zyngier@arm.com> [110926 03:30]:
> Even when CONFIG_MULTI_IRQ_HANDLER is selected, the core code
> requires the arch_irq_handler_default macro to be defined as
> a fallback.
>
> It turns out nobody is using that particular feature as both PXA
> and shmobile have all their machine descriptors populated with
> the interrupt handler, leaving unused code (or empty macros) in
> their entry-macro.S file just to be able to compile entry-armv.S.
>
> Make CONFIG_MULTI_IRQ_HANDLER exclusive wrt arch_irq_handler_default,
> which allows to remove one test from the hot path. Also cleanup both
> PXA and shmobile entry-macro.S.
>
> Cc: Eric Miao <eric.y.miao@gmail.com>
> Cc: Paul Mundt <lethal@linux-sh.org>
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Tested-by: Tony Lindgren <tony@atomide.com>
^ permalink raw reply
* [PATCH v2 02/16] ARM: smp: Add an IPI handler callable from C code
From: Tony Lindgren @ 2011-09-28 1:01 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317034955-1029-3-git-send-email-marc.zyngier@arm.com>
* Marc Zyngier <marc.zyngier@arm.com> [110926 03:33]:
> In order to be able to handle IPI directly from C code instead of
> assembly code, introduce handle_IPI(), which is modeled after handle_IRQ().
>
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Tested-by: Tony Lindgren <tony@atomide.com>
^ permalink raw reply
* [PATCH v2 03/16] ARM: GIC: Add global gic_handle_irq() function
From: Tony Lindgren @ 2011-09-28 1:01 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317034955-1029-4-git-send-email-marc.zyngier@arm.com>
* Marc Zyngier <marc.zyngier@arm.com> [110926 03:33]:
> Provide the GIC code with a low level handler that can be used
> by platforms using CONFIG_MULTI_IRQ_HANDLER. Though the handler is
> written in C, the compiled code doesn't feel much slower than its
> assembly counterpart (at least with my gcc 4.4.1).
>
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Tested-by: Tony Lindgren <tony@atomide.com>
^ permalink raw reply
* [PATCH v2 14/16] ARM: omap2/3: Add global omap2/3_intc_handle_irq() functions
From: Tony Lindgren @ 2011-09-28 1:02 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317034955-1029-15-git-send-email-marc.zyngier@arm.com>
* Marc Zyngier <marc.zyngier@arm.com> [110926 07:02]:
> Provide the OMAP2/3 IRQ code with low level handlers that can be used
> by platforms using CONFIG_MULTI_IRQ_HANDLER. Though the handlers are
> written in C, the compiled code looks very similar to its assembly
> counterpart (at least with my gcc 4.4.1).
>
> Cc: Tony Lindgren <tony@atomide.com>
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Nice, thanks for doing this!
Tested-by: Tony Lindgren <tony@atomide.com>
^ permalink raw reply
* [PATCH v2 15/16] ARM: omap2plus: convert to CONFIG_MULTI_IRQ_HANDLER
From: Tony Lindgren @ 2011-09-28 1:04 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317034955-1029-16-git-send-email-marc.zyngier@arm.com>
* Marc Zyngier <marc.zyngier@arm.com> [110926 07:02]:
> Convert the omap2plus platforms to be using CONFIG_MULTI_IRQ_HANDLER.
> Each machine is modified to provide either omap2_intc_handle_irq(),
> omap3_intc_handle_irq() or gic_handle_irq().
>
> This allows for a major cleanup, removing the MULTI_OMAP setup
> from the interrupt path.
>
> Tested on both Panda and IGEPv2 (single kernel image)
...
> --- a/arch/arm/mach-omap2/Kconfig
> +++ b/arch/arm/mach-omap2/Kconfig
> @@ -25,6 +25,7 @@ config ARCH_OMAP2
> depends on ARCH_OMAP2PLUS
> default y
> select CPU_V6
> + select MULTI_IRQ_HANDLER
>
> config ARCH_OMAP3
> bool "TI OMAP3"
This one selects it only for ARCH_OMAP2, not for ARCH_OMAP2PLUS.
This might require minor merging with the cleanup I've posted, but
that should be trivial.
Other than that:
Tested-by: Tony Lindgren <tony@atomide.com>
^ permalink raw reply
* [PATCH v2 16/16] ARM: GIC: Make MULTI_IRQ_HANDLER mandatory
From: Tony Lindgren @ 2011-09-28 1:04 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317034955-1029-17-git-send-email-marc.zyngier@arm.com>
* Marc Zyngier <marc.zyngier@arm.com> [110926 03:35]:
> Now that MULTI_IRQ_HANDLER is selected by all the in-tree
> GIC users, make it mandatory and remove the unused macros.
>
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Tested-by: Tony Lindgren <tony@atomide.com>
^ permalink raw reply
* [PATCH v4 0/3] Add support for tegra2 based ventana board
From: Peter De Schrijver @ 2011-09-28 1:04 UTC (permalink / raw)
To: linux-arm-kernel
This patch set adds support for the tegra2 based ventana development board.
Boot tested on ventana.
Now finally without Change-IDs I hope...
Peter De Schrijver (3):
arm/tegra: prepare Seaboard pinmux code for derived boards
arm/tegra: add support for ventana pinmuxing
arm/tegra: device tree support for ventana board
arch/arm/boot/dts/tegra-ventana.dts | 32 ++++++++++++++
arch/arm/mach-tegra/Kconfig | 6 +++
arch/arm/mach-tegra/Makefile | 1 +
arch/arm/mach-tegra/Makefile.boot | 1 +
arch/arm/mach-tegra/board-dt.c | 5 ++-
arch/arm/mach-tegra/board-seaboard-pinmux.c | 63 ++++++++++++++++++++++++---
6 files changed, 101 insertions(+), 7 deletions(-)
create mode 100644 arch/arm/boot/dts/tegra-ventana.dts
^ permalink raw reply
* [PATCH v4 1/3] arm/tegra: prepare Seaboard pinmux code for derived boards
From: Peter De Schrijver @ 2011-09-28 1:05 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317171902-14736-1-git-send-email-pdeschrijver@nvidia.com>
This patch splits out the common part of pinmux and GPIO initialization for
seaboard and derived boards. This code is based on work done by Jong Kim
<jongk@nvidia.com>.
Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
---
arch/arm/mach-tegra/board-seaboard-pinmux.c | 14 ++++++++++----
1 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/arch/arm/mach-tegra/board-seaboard-pinmux.c b/arch/arm/mach-tegra/board-seaboard-pinmux.c
index 74f78b7..b31c765 100644
--- a/arch/arm/mach-tegra/board-seaboard-pinmux.c
+++ b/arch/arm/mach-tegra/board-seaboard-pinmux.c
@@ -1,5 +1,6 @@
/*
- * Copyright (C) 2010 NVIDIA Corporation
+ * Copyright (C) 2010,2011 NVIDIA Corporation
+ * Copyright (C) 2011 Google, Inc.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
@@ -160,7 +161,7 @@ static __initdata struct tegra_pingroup_config seaboard_pinmux[] = {
-static struct tegra_gpio_table gpio_table[] = {
+static struct tegra_gpio_table common_gpio_table[] = {
{ .gpio = TEGRA_GPIO_SD2_CD, .enable = true },
{ .gpio = TEGRA_GPIO_SD2_WP, .enable = true },
{ .gpio = TEGRA_GPIO_SD2_POWER, .enable = true },
@@ -171,12 +172,17 @@ static struct tegra_gpio_table gpio_table[] = {
{ .gpio = TEGRA_GPIO_USB1, .enable = true },
};
-void __init seaboard_pinmux_init(void)
+static void __init seaboard_common_pinmux_init(void)
{
tegra_pinmux_config_table(seaboard_pinmux, ARRAY_SIZE(seaboard_pinmux));
tegra_drive_pinmux_config_table(seaboard_drive_pinmux,
ARRAY_SIZE(seaboard_drive_pinmux));
- tegra_gpio_config(gpio_table, ARRAY_SIZE(gpio_table));
+ tegra_gpio_config(common_gpio_table, ARRAY_SIZE(common_gpio_table));
+}
+
+void __init seaboard_pinmux_init(void)
+{
+ seaboard_common_pinmux_init();
}
--
1.7.0.4
^ permalink raw reply related
* [PATCH v4 2/3] arm/tegra: add support for ventana pinmuxing
From: Peter De Schrijver @ 2011-09-28 1:05 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317171902-14736-1-git-send-email-pdeschrijver@nvidia.com>
Add support for ventana pinmuxing as a seaboard derivative. This is a cut down
version of work done by Jong Kim <jongk@nvidia.com>.
Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
---
arch/arm/mach-tegra/Makefile | 1 +
arch/arm/mach-tegra/board-seaboard-pinmux.c | 49 +++++++++++++++++++++++++-
2 files changed, 48 insertions(+), 2 deletions(-)
diff --git a/arch/arm/mach-tegra/Makefile b/arch/arm/mach-tegra/Makefile
index f11b910..91a07e1 100644
--- a/arch/arm/mach-tegra/Makefile
+++ b/arch/arm/mach-tegra/Makefile
@@ -31,6 +31,7 @@ obj-${CONFIG_MACH_SEABOARD} += board-seaboard-pinmux.o
obj-${CONFIG_MACH_TEGRA_DT} += board-dt.o
obj-${CONFIG_MACH_TEGRA_DT} += board-harmony-pinmux.o
+obj-${CONFIG_MACH_TEGRA_DT} += board-seaboard-pinmux.o
obj-${CONFIG_MACH_TRIMSLICE} += board-trimslice.o
obj-${CONFIG_MACH_TRIMSLICE} += board-trimslice-pinmux.o
diff --git a/arch/arm/mach-tegra/board-seaboard-pinmux.c b/arch/arm/mach-tegra/board-seaboard-pinmux.c
index b31c765..b62b04d 100644
--- a/arch/arm/mach-tegra/board-seaboard-pinmux.c
+++ b/arch/arm/mach-tegra/board-seaboard-pinmux.c
@@ -158,8 +158,26 @@ static __initdata struct tegra_pingroup_config seaboard_pinmux[] = {
{TEGRA_PINGROUP_XM2D, TEGRA_MUX_NONE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
};
-
-
+static __initdata struct tegra_pingroup_config ventana_pinmux[] = {
+ {TEGRA_PINGROUP_DAP3, TEGRA_MUX_DAP3, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
+ {TEGRA_PINGROUP_DDC, TEGRA_MUX_RSVD2, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_DTA, TEGRA_MUX_VI, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_DTB, TEGRA_MUX_VI, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_DTC, TEGRA_MUX_VI, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_DTD, TEGRA_MUX_VI, TEGRA_PUPD_PULL_DOWN, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_GMD, TEGRA_MUX_SFLASH, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
+ {TEGRA_PINGROUP_LPW0, TEGRA_MUX_RSVD4, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_LPW2, TEGRA_MUX_RSVD4, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_LSC1, TEGRA_MUX_RSVD4, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_LSCK, TEGRA_MUX_RSVD4, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
+ {TEGRA_PINGROUP_LSDA, TEGRA_MUX_RSVD4, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
+ {TEGRA_PINGROUP_PTA, TEGRA_MUX_RSVD2, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_SLXC, TEGRA_MUX_SDIO3, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_SLXK, TEGRA_MUX_SDIO3, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_SPIA, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
+ {TEGRA_PINGROUP_SPIC, TEGRA_MUX_GMI, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
+ {TEGRA_PINGROUP_SPIG, TEGRA_MUX_SPI2_ALT, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
+};
static struct tegra_gpio_table common_gpio_table[] = {
{ .gpio = TEGRA_GPIO_SD2_CD, .enable = true },
@@ -172,6 +190,26 @@ static struct tegra_gpio_table common_gpio_table[] = {
{ .gpio = TEGRA_GPIO_USB1, .enable = true },
};
+static void __init update_pinmux(struct tegra_pingroup_config *newtbl, int size)
+{
+ int i, j;
+ struct tegra_pingroup_config *new_pingroup, *base_pingroup;
+
+ /* Update base seaboard pinmux table with secondary board
+ * specific pinmux table table.
+ */
+ for (i = 0; i < size; i++) {
+ new_pingroup = &newtbl[i];
+ for (j = 0; j < ARRAY_SIZE(seaboard_pinmux); j++) {
+ base_pingroup = &seaboard_pinmux[j];
+ if (new_pingroup->pingroup == base_pingroup->pingroup) {
+ *base_pingroup = *new_pingroup;
+ break;
+ }
+ }
+ }
+}
+
static void __init seaboard_common_pinmux_init(void)
{
tegra_pinmux_config_table(seaboard_pinmux, ARRAY_SIZE(seaboard_pinmux));
@@ -186,3 +224,10 @@ void __init seaboard_pinmux_init(void)
{
seaboard_common_pinmux_init();
}
+
+void __init ventana_pinmux_init(void)
+{
+ update_pinmux(ventana_pinmux, ARRAY_SIZE(ventana_pinmux));
+ seaboard_common_pinmux_init();
+}
+
--
1.7.0.4
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox