Personal tools

Log in

Changes

From IGEP - ISEE Wiki

Jump to: navigation, search

How to get the Poky Linux distribution

7,484 bytes removed, 12:37, 17 May 2011
remove beacause is obsolete
Switch roles and do again
 
===== TVP5151 =====
 
* http://git.linuxtv.org/pinchartl/media.git
* http://git.ideasonboard.org/?p=media-ctl.git
* http://www.omappedia.org/wiki/Camera-ISP_Driver
* http://linuxtv.org/downloads/presentations/summit_jun_2010/20100614-v4l2_summit-media.pdf
 
======Kernel======
 
git clone git://linuxtv.org/pinchartl/media.git
git checkout -b origin/media-0005-sensors media-0005-sensors
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- omap2plus_defconfig
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig
 
Select "Device Drivers->Multimedia support" (CONFIG_MEDIA_SUPPORT) and enter to the submenu.
 
--- Multimedia support
*** Multimedia core support ***
[*] Media Controller API (EXPERIMENTAL)
<*> Video For Linux
[*] Enable Video For Linux API 1 (DEPRECATED) (NEW)
[*] V4L2 sub-device userspace API (EXPERIMENTAL)
[*] Video capture adapters --->
--- Video capture adapters
<*> OMAP 3 Camera support (EXPERIMENTAL)
[*] OMAP 3 Camera debug messages
Encoders/decoders and other helper chips --->
<*> Texas Instruments TVP5150 video decoder
 
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage modules
 
Note: Building OMAP 3 Camera support as module fails with error
ERROR: "omap_pm_set_min_bus_tput" [drivers/media/video/isp/omap3-isp.ko] undefined!
 
====== Helper: media-ctl ======
 
git clone git://git.ideasonboard.org/media-ctl.git
git checkout origin/new-api -b new-api
make CROSS_COMPILE=arm-none-linux-gnueabi- KDIR=<kernel include dir>
 
./media-ctl -p
 
cat /sys/devices/platform/omap3isp/video4linux/v4l-subdev2/name; cat /sys/devices/platform/omap3isp/video4linux/v4l-subdev2/dev
OMAP3 ISP CCDC
81:4
mknod /dev/v4l-subdev2 c 81 4
 
cat /sys/devices/platform/omap3isp/video4linux/v4l-subdev8/name; cat /sys/devices/platform/omap3isp/video4linux/v4l-subdev8/dev
tvp5150 2-005c
81:15
mknod /dev/v4l-subdev8 c 81 15
 
mknod /dev/video2 c 81 5
 
./media-ctl -r -l '"tvp5150 2-005c":0->"OMAP3 ISP CCDC":0[1], "OMAP3 ISP CCDC":1->"OMAP3 ISP CCDC output":0[1]'
 
gst-launch v4l2src device=/dev/video2 ! ffmpegcolorspace ! fakesink
 
====== Patches ======
<pre>
diff --git a/drivers/media/video/tvp5150.c b/drivers/media/video/tvp5150.c
index 5892766..af2ebe7 100644
--- a/drivers/media/video/tvp5150.c
+++ b/drivers/media/video/tvp5150.c
@@ -8,10 +8,13 @@
#include <linux/i2c.h>
#include <linux/slab.h>
#include <linux/videodev2.h>
+#include <linux/v4l2-mediabus.h>
#include <linux/delay.h>
+#include <media/v4l2-chip-ident.h>
+#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
+#include <media/v4l2-subdev.h>
#include <media/tvp5150.h>
-#include <media/v4l2-chip-ident.h>
#include "tvp5150_reg.h"
@@ -67,6 +70,7 @@ static struct v4l2_queryctrl tvp5150_qctrl[] = {
struct tvp5150 {
struct v4l2_subdev sd;
+ struct media_pad pad;
v4l2_std_id norm; /* Current set standard */
u32 input;
@@ -1059,6 +1063,7 @@ static int tvp5150_probe(struct i2c_client *c,
{
struct tvp5150 *core;
struct v4l2_subdev *sd;
+ int ret;
/* Check if the adapter supports the needed features */
if (!i2c_check_functionality(c->adapter,
@@ -1071,6 +1076,8 @@ static int tvp5150_probe(struct i2c_client *c,
}
sd = &core->sd;
v4l2_i2c_subdev_init(sd, c, &tvp5150_ops);
+ core->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
+
v4l_info(c, "chip found @ 0x%02x (%s)\n",
c->addr << 1, c->adapter->name);
@@ -1084,7 +1091,13 @@ static int tvp5150_probe(struct i2c_client *c,
if (debug > 1)
tvp5150_log_status(sd);
- return 0;
+
+ core->pad.flags = MEDIA_PAD_FLAG_OUTPUT;
+ ret = media_entity_init(&core->sd.entity, 1, &core->pad, 0);
+ if (ret < 0)
+ kfree(core);
+
+ return ret;
}
static int tvp5150_remove(struct i2c_client *c)
@@ -1096,6 +1109,7 @@ static int tvp5150_remove(struct i2c_client *c)
c->addr << 1);
v4l2_device_unregister_subdev(sd);
+ media_entity_cleanup(&sd->entity);
kfree(to_tvp5150(sd));
return 0;
}
</pre>
 
<pre>
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
index 5e035a5..ea7e082 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -32,6 +32,7 @@
#include <plat/display.h>
#include <plat/onenand.h>
+#include "devices.h"
#include "mux.h"
#include "hsmmc.h"
#include "sdram-numonyx-m65kxxxxam.h"
@@ -546,6 +547,10 @@ static void __init igep2_i2c_init(void)
if (ret)
pr_warning("IGEP2: Could not register I2C1 bus (%d)\n", ret);
+ ret = omap_register_i2c_bus(2, 400, NULL, 0);
+ if (ret)
+ pr_warning("IGEP2: Could not register I2C2 bus (%d)\n", ret);
+
/*
* Bus 3 is attached to the DVI port where devices like the pico DLP
* projector don't work reliably with 400kHz
@@ -625,6 +630,44 @@ static void __init igep2_wlan_bt_init(void)
static inline void __init igep2_wlan_bt_init(void) { }
#endif
+#include <linux/videodev2.h>
+
+#include "../../../drivers/media/video/isp/isp.h"
+#include "../../../drivers/media/video/isp/ispreg.h"
+
+static struct i2c_board_info igep0022_camera_i2c_devices[] = {
+ {
+ I2C_BOARD_INFO("tvp5150", (0xb8 >> 1)),
+ /* .platform_data = &rx51_et8ek8_platform_data, */
+ },
+};
+
+static struct isp_subdev_i2c_board_info igep0022_camera_primary_subdevs[] = {
+ {
+ .board_info = &igep0022_camera_i2c_devices[0],
+ .i2c_adapter_id = 2,
+ },
+ { NULL, 0, },
+};
+
+static struct isp_v4l2_subdevs_group igep0022_camera_subdevs[] = {
+ {
+ .subdevs = igep0022_camera_primary_subdevs,
+ .interface = ISP_INTERFACE_PARALLEL,
+ .bus = { .parallel = {
+ .width = 8,
+ .data_lane_shift = 0,
+ .clk_pol = 0,
+ .bridge = ISPCTRL_PAR_BRIDGE_DISABLE,
+ } },
+ },
+ { NULL, 0, },
+};
+
+static struct isp_platform_data igep0022_isp_pdata = {
+ .subdevs = igep0022_camera_subdevs,
+};
+
static void __init igep2_init(void)
{
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
@@ -649,6 +692,9 @@ static void __init igep2_init(void)
*/
igep2_wlan_bt_init();
+ /* Camera interface */
+ if (omap3_init_camera(&igep0022_isp_pdata) < 0)
+ pr_warning("IGEP2: Unable to register camera platform \n");
}
MACHINE_START(IGEP0020, "IGEP v2 board")
</pre>
 
====== Information ======
 
'''Assumptions'''
* Device: TVP5151
* Input connector: S-video (AIP1A (luminance), AIP1B (chrominance))
* Video Format: NTSC (M, 4.43), PAL (B, G, H, I, M, N, Nc) or SECAM (B, D, G, K1, L)
* Output format: 8-bit 4:2:2 YCbCr with discrete sync outputs
 
'''Recommended Settings'''
 
Recommended I2C writes: This setup requires additional writes to output the discrete sync 4:2:2 data outputs, the HSYNC, and the VSYNC, and to autoswitch between all video formats mentioned above.
* I2C register address 00h = Video input source selection #1 register
** I2C data 00h = Selects the Composite input
* I2C register address 03h = Miscellaneous controls register address
** I2C data 0Dh = Enables the YCbCr output data, HSYNC, VSYNC/PALI, AVID, and FID/GLCO
* I2C register address 04h = Autoswitch mask register
** I2C data C0h = Unmask NTSC-4.43, PAL-N, and PAL-M from the autoswitch process
* I2C register address 0Dh = Outputs and data rates select register
** I2C data 40h = Enables 8-bit 4:2:2 YCbCr with discrete sync output
 
i2cset -f -y 2 0x5c 0x00 0x00
i2cset -f -y 2 0x5c 0x03 0x0d
i2cset -f -y 2 0x5c 0x04 0xc0
i2cset -f -y 2 0x5c 0x0d 0x40
 
... UNDER DEVELOPMENT ...
--- That's all folks ---
[[Category:Software distributions|Poky]]
0
edits