public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
* i.MX31 Camera Sensor Interface support
@ 2009-01-24  1:27 Guennadi Liakhovetski
  2009-02-13 18:22 ` Valentin Longchamp
  0 siblings, 1 reply; 3+ messages in thread
From: Guennadi Liakhovetski @ 2009-01-24  1:27 UTC (permalink / raw)
  To: Linux Media Mailing List; +Cc: Valentin Longchamp

Hi all,

I uploaded my current patch-stack for the i.MX31 Camera Sensor Interface 
to http://gross-embedded.homelinux.org/~lyakh/i.MX31-20090124/ (to be 
submitted later, hopefully for 2.6.30). As stated in 0000-base-unknown, 
these patches shall be used on top of the 
git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx.git tree 
"upstream" branch.

Please also notice that the server will be offline for the most of the day 
tomorrow (CET), after which it should come back to the usual 24x7 
visibility (although under different IPs:-)).

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: i.MX31 Camera Sensor Interface support
  2009-01-24  1:27 i.MX31 Camera Sensor Interface support Guennadi Liakhovetski
@ 2009-02-13 18:22 ` Valentin Longchamp
  2009-02-17 11:14   ` Valentin Longchamp
  0 siblings, 1 reply; 3+ messages in thread
From: Valentin Longchamp @ 2009-02-13 18:22 UTC (permalink / raw)
  To: Guennadi Liakhovetski; +Cc: Linux Media Mailing List

[-- Attachment #1: Type: text/plain, Size: 4745 bytes --]

Hi Guennadi,

Guennadi Liakhovetski wrote:
> I uploaded my current patch-stack for the i.MX31 Camera Sensor Interface 
> to http://gross-embedded.homelinux.org/~lyakh/i.MX31-20090124/ (to be 
> submitted later, hopefully for 2.6.30). As stated in 0000-base-unknown, 
> these patches shall be used on top of the 
> git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx.git tree 
> "upstream" branch.
> 

I have tested your patchset on our mx31moboard system. However, I would
like some precisions on how things should be registered.

>From what I have seen in the code and is confirmed in the log below, we
have a mx3_camera platform device that is registered and matched with
the mx3_camera driver (please note the filter drop, is that normal ?
Should some other things be registered ?)

> kobject:kobject: 'mx3_camera' (bf008008): kobject_add_internal: parent: 'module', set: 'module'            
> kobject:kobject: 'holders' (c7963360): kobject_add_internal: parent: 'mx3_camera', set: '<NULL>'           
> kobject_uevent:kobject: 'mx3_camera' (bf008008): kobject_uevent_env                                        
> kobject:kobject: 'mx3_camera' (bf008008): fill_kobj_path: path = '/module/mx3_camera'                      
> kobject:kobject: 'notes' (c79632e0): kobject_add_internal: parent: 'mx3_camera', set: '<NULL>'             
> bus:bus: 'platform': add driver mx3-camera                                                                 
> kobject:kobject: 'mx3-camera' (c798d0c0): kobject_add_internal: parent: 'drivers', set: 'drivers'          
> dd:bus: 'platform': driver_probe_device: matched device mx3-camera.0 with driver mx3-camera                
> dd:bus: 'platform': really_probe: probing driver mx3-camera with device mx3-camera.0                       
> core:device: 'camera_host0': device_add                                                                    
> kobject:kobject: 'camera_host0' (c889e07c): kobject_add_internal: parent: 'mx3-camera.0', set: 'devices'   
> kobject_uevent:kobject: 'camera_host0' (c889e07c): kobject_uevent_env                                      
> kobject_uevent:kobject: 'camera_host0' (c889e07c): kobject_uevent_env: filter function caused the event to drop!
> dd:driver: 'mx3-camera.0': driver_bound: bound to device 'mx3-camera'                                           
> dd:bus: 'platform': really_probe: bound device mx3-camera.0 to driver mx3-camera                                
> kobject_uevent:kobject: 'mx3-camera' (c798d0c0): kobject_uevent_env                                             
> kobject:kobject: 'mx3-camera' (c798d0c0): fill_kobj_path: path = '/bus/platform/drivers/mx3-camera'

The soc-camera also creates a bus. However, even with a capture device
driver loaded (let's say mt9m001 for instance), I have nothing in
/sys/bus/soc-camera/devices (that's where the capture devices should be
regitered thanks to the soc_camera_device_register() call if I have
understood correctly).

Furthermore, in /sys/bus/soc-camera/drivers, I only have the "dummy"
camera driver that is declared in the soc_camera.c file. Shouldn't I
have something related to mx3-camera there thanks to the the
soc_camera_host_register call (although of course the mx3-camera driver
already is registered with the mx3-camera platform_device) as you can
see it (like something related to camera_host0):

> root@mx31moboard:~/cam_test# ls -al /sys/bus/platform/devices/mx3-camera.0/
> drwxr-xr-x    3 root     root            0 Oct 16 13:51 .
> drwxr-xr-x    9 root     root            0 Oct 16 13:51 ..
> lrwxrwxrwx    1 root     root            0 Oct 16 13:52 bus -> ../../../bus/platform
> drwxr-xr-x    2 root     root            0 Oct 16 13:52 camera_host0
> lrwxrwxrwx    1 root     root            0 Oct 16 13:52 driver -> ../../../bus/platform/drivers/mx3-camera
> -r--r--r--    1 root     root         4096 Oct 16 13:52 modalias
> lrwxrwxrwx    1 root     root            0 Oct 16 13:52 subsystem -> ../../../bus/platform
> -rw-r--r--    1 root     root         4096 Oct 16 13:52 uevent

Is all this correct so far, and I would need further declarations in my
platform devices for the things to be registered together ? I have
attached you the file where I do the initializations related to the
mx3_camera device and the sensor  we want to test against so that you
can check (we are testing with a mt9m001 device atm, but we are
targeting a mt9t031 that's why the mixed names). I have tried to copy
this from what is done with the pxa.

Thank you for your explainations and best regards.

Val

-- 
Valentin Longchamp, PhD Student, EPFL-STI-LSRO1
valentin.longchamp@epfl.ch, Phone: +41216937827
http://people.epfl.ch/valentin.longchamp
MEA3485, Station 9, CH-1015 Lausanne

[-- Attachment #2: mx31moboard-marxbot.c --]
[-- Type: text/x-csrc, Size: 3162 bytes --]

/*
 * Copyright (C) 2009 Valentin Longchamp, EPFL Mobots group
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#include <linux/types.h>
#include <linux/init.h>
#include <linux/gpio.h>
#include <linux/delay.h>

#include <linux/platform_device.h>

#include <mach/hardware.h>
#include <mach/common.h>
#include <mach/imx-uart.h>
#include <mach/iomux-mx3.h>
#include <mach/mx3_camera.h>
#include <linux/i2c.h>
#include <media/soc_camera.h>

#include "devices.h"

static int csi_pins[] = {
	MX31_PIN_CSI_D4__CSI_D4, MX31_PIN_CSI_D5__CSI_D5,
	MX31_PIN_CSI_D6__CSI_D6, MX31_PIN_CSI_D7__CSI_D7,
	MX31_PIN_CSI_D8__CSI_D8, MX31_PIN_CSI_D9__CSI_D9,
	MX31_PIN_CSI_D10__CSI_D10, MX31_PIN_CSI_D11__CSI_D11,
	MX31_PIN_CSI_D12__CSI_D12, MX31_PIN_CSI_D13__CSI_D13,
	MX31_PIN_CSI_D14__CSI_D14, MX31_PIN_CSI_D15__CSI_D15,
	MX31_PIN_CSI_HSYNC__CSI_HSYNC, MX31_PIN_CSI_MCLK__CSI_MCLK,
	MX31_PIN_CSI_PIXCLK__CSI_PIXCLK, MX31_PIN_CSI_VSYNC__CSI_VSYNC,
	MX31_PIN_GPIO3_0__GPIO3_0, MX31_PIN_GPIO3_1__GPIO3_1,
};

static int marxbot_mt9t031_power(struct device *dev, int on)
{
	//GPIO3_0 is connected to standby, it would be more a sleep function
	if (on)
		gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1), 0);
	else
		gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1), 1);
	
	return 0;
}

static int marxbot_mt9t031_reset(struct device *dev)
{
	gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_GPIO3_0), 1);
	udelay(100);
	gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_GPIO3_0), 0);
	return 0;
}

static struct soc_camera_link mt9t031_pdata = {
	.bus_id	= 0x5d,
	.gpio	= ARCH_NR_GPIOS + 1,
	.power	= marxbot_mt9t031_power,
	.reset	= marxbot_mt9t031_reset,
};

#ifdef CONFIG_I2C_IMX
static struct i2c_board_info marxbot_i2c_devices[] = {
	[0] = {
		I2C_BOARD_INFO("mt9m001", 0x5d),
		.platform_data = &mt9t031_pdata,
	},
};
#endif

/*
 * Try to reserve buffer space enough for 8 buffers 320x240@1 for
 * streaming plus 2 buffers 2048x1536@1 for still image < 10MB
 */
#define MX31MARXBOT_CAMERA_MEM_SIZE (4 * 1024 * 1024)

/*
 * system init for baseboard usage. Will be called by mx31moboard init.
 */
void __init mx31moboard_marxbot_init(void)
{
	printk(KERN_INFO "Initializing mx31marxbot peripherals\n");

	mxc_iomux_setup_multiple_pins(csi_pins, ARRAY_SIZE(csi_pins), "csi");
	mx3_register_camera(MX31MARXBOT_CAMERA_MEM_SIZE,
			MX3_CAMERA_DATAWIDTH_8 | MX3_CAMERA_DATAWIDTH_10,
			2000);
#ifdef CONFIG_I2C_IMX
	i2c_register_board_info(0, marxbot_i2c_devices,
			ARRAY_SIZE(marxbot_i2c_devices));
#endif

}

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: i.MX31 Camera Sensor Interface support
  2009-02-13 18:22 ` Valentin Longchamp
@ 2009-02-17 11:14   ` Valentin Longchamp
  0 siblings, 0 replies; 3+ messages in thread
From: Valentin Longchamp @ 2009-02-17 11:14 UTC (permalink / raw)
  To: Guennadi Liakhovetski; +Cc: Linux Media Mailing List

Hi Guennadi,

Valentin Longchamp wrote:
> Hi Guennadi,
> 
> Guennadi Liakhovetski wrote:
>> I uploaded my current patch-stack for the i.MX31 Camera Sensor Interface 
>> to http://gross-embedded.homelinux.org/~lyakh/i.MX31-20090124/ (to be 
>> submitted later, hopefully for 2.6.30). As stated in 0000-base-unknown, 
>> these patches shall be used on top of the 
>> git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx.git tree 
>> "upstream" branch.
>>
> 
> I have tested your patchset on our mx31moboard system. However, I would
> like some precisions on how things should be registered.
> 

I am now able to register a camera device on the soc_camera bus with
mx3_camera, I had not initialized well the bus_id for my platform
device. After struggling with a few minor hardware bugs, I am now able
to register a MT9T031 camera (actually we have a MT9T001 for testing,
but they are very similar).

So things seem to be working fine. I am testing it with the capture.c
example from v4linux. But the mt9t031 only supports bayer format atm (I
could try to work on it, but first I need to validate our hardware
design by grabbing real images), could someone point me to an easy way
of converting this bayer format to something readable (maybe a raw image
for gimp, that's what I am trying to do now) ?

By the way, Guennadi, if you want me to test something more extensively,
don't hesitate to ask me about it.

Thanks again for your patch.

Val

-- 
Valentin Longchamp, PhD Student, EPFL-STI-LSRO1
valentin.longchamp@epfl.ch, Phone: +41216937827
http://people.epfl.ch/valentin.longchamp
MEA3485, Station 9, CH-1015 Lausanne

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2009-02-17 11:14 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-01-24  1:27 i.MX31 Camera Sensor Interface support Guennadi Liakhovetski
2009-02-13 18:22 ` Valentin Longchamp
2009-02-17 11:14   ` Valentin Longchamp

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox