Hi Daniel, On Thursday 24 March 2011 11:26:01 Daniel Lundborg wrote: > > Daniel Lundborg wrote: > > > > > > I am successfully using the gumstix overo board together with a camera > > > sensor Aptina MT9V034 with the kernel 2.6.35 and patches from > > > http://git.linuxtv.org/pinchartl/media.git (isp6). > > > > Which branch did you use? > > I am using the media-2.6.35-0006-sensors branch which could be found > just a couple of weeks ago. It has the mt9v032 sensor in it. My mt9v034 > driver is based on the mt9v032 code. Now that the OMAP3 ISP driver is on its way to mainline, I've reorganized the repository. You can use the media-2.6.38-0002-sensors branch for 2.6.38. > > > I can use the media-ctl program and yavta to take pictures in continous > > > streaming mode. > > > > > > media-ctl -r -l '"mt9034 3-0048":0->"OMAP3 ISP CCDC":0[1], "OMAP3 ISP > > > CCDC":1->"OMAP3 ISP CCDC output":0[1]' > > > media-ctl -f '"mt9v034 3-0048":0[SGRBG10 752x480], "OMAP3 ISP > > > CCDC":1[SGRBG10 752x480] > > > > > > and then: > > > > > > yavta -f SGRBG10 -s 752x480 -n 1 --capture=1 -F /dev/video2 > > > > > > Is there a way to set the ISP in single shot mode? > > > > Single shot for the ISP is the same as to queue just one buffer. I assume > > the single shot mode is something that the sensor supports? > > > > > I have tested setting the mt9v034 in snapshot mode and manually trigger > > > the camera, but the ISP does not send a picture. Is there a way to solve > > > this with the current OMAP3 isp code? > > > > Do you get any errors, or you just don't get any video buffers? > > This is the output from yavta when I put the sensor in streaming mode: > > root@overo:~/yavta# ./yavta -f SGRBG10 -s 752x480 -n 1 --capture=1 -F > /dev/video2 > > Device /dev/video2 opened: OMAP3 ISP CCDC output (media). > Video format set: width: 752 height: 480 buffer size: 721920 > Video format: BA10 (30314142) 752x480 > 1 buffers requested. > length: 721920 offset: 0 > Buffer 0 mapped at address 0x4014d000. > 0 (0) [-] 0 721920 bytes 65877.098848 1300958239.111966 0.001 fps > Captured 1 frames in 0.000062 seconds (16129.032258 fps, > 11643870967.741936 B/s). > 1 buffers released. > > And the output when putting the sensor in snapshot mode: > > root@overo:~/yavta# ./yavta -f SGRBG10 -s 752x480 -n 1 --capture=1 -F > /dev/video2 > > Device /dev/video2 opened: OMAP3 ISP CCDC output (media). > Video format set: width: 752 height: 480 buffer size: 721920 > Video format: BA10 (30314142) 752x480 > 1 buffers requested. > length: 721920 offset: 0 > Buffer 0 mapped at address 0x4014d000. > > And it freezes. I can stop yavta with CTRL+C. Have you tried to trigger the sensor multiple times in a row ? > To put the sensor in snapshot/shutter mode I set the ext_trig = 1 in the > platform_data structure in my board file. > > struct mt9v034_platform_data { > unsigned int clk_pol:1; > unsigned int ext_trig:1; > > void (*set_clock)(struct v4l2_subdev *subdev, unsigned int rate); > }; > > And in the s_stream I set the chip_control register for the MT9V034 > sensor to: > > static int mt9v034_s_stream(struct v4l2_subdev *subdev, int enable) > { > struct mt9v034 *mt9v034 = to_mt9v034(subdev); > const u16 chip_clear = mt9v034->pdata->ext_trig? 0x0100 : 0; > const u16 chip_set = mt9v034->pdata->ext_trig? 0x18 : > MT9V034_CHIP_CONTROL_MASTER_MODE | MT9V034_CHIP_CONTROL_DOUT_ENABLE | > MT9V034_CHIP_CONTROL_SEQUENTIAL; > struct i2c_client *client = v4l2_get_subdevdata(subdev); > struct v4l2_mbus_framefmt *format = &mt9v034->format; > struct v4l2_rect *crop = &mt9v034->crop; > unsigned int hratio; > unsigned int vratio; > int ret; > > if (!enable) { > ret = mt9v034_set_chip_control(mt9v034, chip_clear, chip_set); > if (ret < 0) > return ret; > > return __mt9v034_set_power(mt9v034, 0); > } > > ret = __mt9v034_set_power(mt9v034, 1); > if (ret < 0) > return ret; > > /* Configure the window size and row/column bin */ > hratio = DIV_ROUND_CLOSEST(crop->width, format->width); > vratio = DIV_ROUND_CLOSEST(crop->height, format->height); > > ret = mt9v034_write(client, MT9V034_READ_MODE, > (hratio - 1) << MT9V034_READ_MODE_ROW_BIN_SHIFT | > (vratio - 1) << MT9V034_READ_MODE_COLUMN_BIN_SHIFT); > if (ret < 0) > return ret; > > ret = mt9v034_write(client, MT9V034_COLUMN_START, crop->left); > if (ret < 0) > return ret; > > ret = mt9v034_write(client, MT9V034_ROW_START, crop->top); > if (ret < 0) > return ret; > > ret = mt9v034_write(client, MT9V034_WINDOW_WIDTH, crop->width); > if (ret < 0) > return ret; > > ret = mt9v034_write(client, MT9V034_WINDOW_HEIGHT, crop->height); > if (ret < 0) > return ret; > > /* Disable the noise correction algorithm and restore the controls. */ > ret = mt9v034_write(client, MT9V034_ROW_NOISE_CORR_CONTROL, 0); > if (ret < 0) > return ret; > > v4l2_ctrl_handler_setup(&mt9v034->ctrls); > > ret = mt9v034_set_chip_control(mt9v034, chip_clear, chip_set); > > return ret; > } > > I can see on the oscilloscope that the sensor is sending something when > I trigger it, but no picture is received.. "something" is a bit vague, can you check the hsync/vsync signals and make sure they're identical in both modes ? > > As the sensor works in streaming mode, are you sure it outputs the image > > of correct size in the single shot mode? > > The sensor has the same output in streaming and single shot mode. -- Regards, Laurent Pinchart -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html