[media] OMAP_VOUT: CLEANUP: Move generic functions and macros to common files
Move the inline functions rotate_90_or_270(), rotation_enabled(), and calc_rotation() from omap_vout.c to omap_voutdef.h. Move the independent functions omap_vout_alloc_buffer() and omap_vout_free_buffer() to omap_voutlib.c. Remove extern identifier from function definitions in omap_voutlib.h Add static identifier to functions that are used locally in omap_vout.c Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
e213e438ce
commit
a137ac870b
@@ -35,17 +35,14 @@
|
|||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/dma-mapping.h>
|
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/videodev2.h>
|
#include <linux/videodev2.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
|
|
||||||
#include <media/videobuf-dma-contig.h>
|
#include <media/videobuf-dma-contig.h>
|
||||||
#include <media/v4l2-device.h>
|
#include <media/v4l2-device.h>
|
||||||
#include <media/v4l2-ioctl.h>
|
#include <media/v4l2-ioctl.h>
|
||||||
|
|
||||||
#include <plat/dma.h>
|
#include <plat/dma.h>
|
||||||
#include <plat/vram.h>
|
|
||||||
#include <plat/vrfb.h>
|
#include <plat/vrfb.h>
|
||||||
#include <video/omapdss.h>
|
#include <video/omapdss.h>
|
||||||
|
|
||||||
@@ -56,7 +53,6 @@ MODULE_AUTHOR("Texas Instruments");
|
|||||||
MODULE_DESCRIPTION("OMAP Video for Linux Video out driver");
|
MODULE_DESCRIPTION("OMAP Video for Linux Video out driver");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
|
||||||
|
|
||||||
/* Driver Configuration macros */
|
/* Driver Configuration macros */
|
||||||
#define VOUT_NAME "omap_vout"
|
#define VOUT_NAME "omap_vout"
|
||||||
|
|
||||||
@@ -65,31 +61,6 @@ enum omap_vout_channels {
|
|||||||
OMAP_VIDEO2,
|
OMAP_VIDEO2,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum dma_channel_state {
|
|
||||||
DMA_CHAN_NOT_ALLOTED,
|
|
||||||
DMA_CHAN_ALLOTED,
|
|
||||||
};
|
|
||||||
|
|
||||||
#define QQVGA_WIDTH 160
|
|
||||||
#define QQVGA_HEIGHT 120
|
|
||||||
|
|
||||||
/* Max Resolution supported by the driver */
|
|
||||||
#define VID_MAX_WIDTH 1280 /* Largest width */
|
|
||||||
#define VID_MAX_HEIGHT 720 /* Largest height */
|
|
||||||
|
|
||||||
/* Mimimum requirement is 2x2 for DSS */
|
|
||||||
#define VID_MIN_WIDTH 2
|
|
||||||
#define VID_MIN_HEIGHT 2
|
|
||||||
|
|
||||||
/* 2048 x 2048 is max res supported by OMAP display controller */
|
|
||||||
#define MAX_PIXELS_PER_LINE 2048
|
|
||||||
|
|
||||||
#define VRFB_TX_TIMEOUT 1000
|
|
||||||
#define VRFB_NUM_BUFS 4
|
|
||||||
|
|
||||||
/* Max buffer size tobe allocated during init */
|
|
||||||
#define OMAP_VOUT_MAX_BUF_SIZE (VID_MAX_WIDTH*VID_MAX_HEIGHT*4)
|
|
||||||
|
|
||||||
static struct videobuf_queue_ops video_vbq_ops;
|
static struct videobuf_queue_ops video_vbq_ops;
|
||||||
/* Variables configurable through module params*/
|
/* Variables configurable through module params*/
|
||||||
static u32 video1_numbuffers = 3;
|
static u32 video1_numbuffers = 3;
|
||||||
@@ -171,49 +142,6 @@ static const struct v4l2_fmtdesc omap_formats[] = {
|
|||||||
|
|
||||||
#define NUM_OUTPUT_FORMATS (ARRAY_SIZE(omap_formats))
|
#define NUM_OUTPUT_FORMATS (ARRAY_SIZE(omap_formats))
|
||||||
|
|
||||||
/*
|
|
||||||
* Allocate buffers
|
|
||||||
*/
|
|
||||||
static unsigned long omap_vout_alloc_buffer(u32 buf_size, u32 *phys_addr)
|
|
||||||
{
|
|
||||||
u32 order, size;
|
|
||||||
unsigned long virt_addr, addr;
|
|
||||||
|
|
||||||
size = PAGE_ALIGN(buf_size);
|
|
||||||
order = get_order(size);
|
|
||||||
virt_addr = __get_free_pages(GFP_KERNEL, order);
|
|
||||||
addr = virt_addr;
|
|
||||||
|
|
||||||
if (virt_addr) {
|
|
||||||
while (size > 0) {
|
|
||||||
SetPageReserved(virt_to_page(addr));
|
|
||||||
addr += PAGE_SIZE;
|
|
||||||
size -= PAGE_SIZE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*phys_addr = (u32) virt_to_phys((void *) virt_addr);
|
|
||||||
return virt_addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Free buffers
|
|
||||||
*/
|
|
||||||
static void omap_vout_free_buffer(unsigned long virtaddr, u32 buf_size)
|
|
||||||
{
|
|
||||||
u32 order, size;
|
|
||||||
unsigned long addr = virtaddr;
|
|
||||||
|
|
||||||
size = PAGE_ALIGN(buf_size);
|
|
||||||
order = get_order(size);
|
|
||||||
|
|
||||||
while (size > 0) {
|
|
||||||
ClearPageReserved(virt_to_page(addr));
|
|
||||||
addr += PAGE_SIZE;
|
|
||||||
size -= PAGE_SIZE;
|
|
||||||
}
|
|
||||||
free_pages((unsigned long) virtaddr, order);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function for allocating video buffers
|
* Function for allocating video buffers
|
||||||
*/
|
*/
|
||||||
@@ -368,43 +296,6 @@ static void omap_vout_release_vrfb(struct omap_vout_device *vout)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Return true if rotation is 90 or 270
|
|
||||||
*/
|
|
||||||
static inline int rotate_90_or_270(const struct omap_vout_device *vout)
|
|
||||||
{
|
|
||||||
return (vout->rotation == dss_rotation_90_degree ||
|
|
||||||
vout->rotation == dss_rotation_270_degree);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return true if rotation is enabled
|
|
||||||
*/
|
|
||||||
static inline int rotation_enabled(const struct omap_vout_device *vout)
|
|
||||||
{
|
|
||||||
return vout->rotation || vout->mirror;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Reverse the rotation degree if mirroring is enabled
|
|
||||||
*/
|
|
||||||
static inline int calc_rotation(const struct omap_vout_device *vout)
|
|
||||||
{
|
|
||||||
if (!vout->mirror)
|
|
||||||
return vout->rotation;
|
|
||||||
|
|
||||||
switch (vout->rotation) {
|
|
||||||
case dss_rotation_90_degree:
|
|
||||||
return dss_rotation_270_degree;
|
|
||||||
case dss_rotation_270_degree:
|
|
||||||
return dss_rotation_90_degree;
|
|
||||||
case dss_rotation_180_degree:
|
|
||||||
return dss_rotation_0_degree;
|
|
||||||
default:
|
|
||||||
return dss_rotation_180_degree;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Free the V4L2 buffers
|
* Free the V4L2 buffers
|
||||||
*/
|
*/
|
||||||
@@ -664,7 +555,7 @@ static int video_mode_to_dss_mode(struct omap_vout_device *vout)
|
|||||||
/*
|
/*
|
||||||
* Setup the overlay
|
* Setup the overlay
|
||||||
*/
|
*/
|
||||||
int omapvid_setup_overlay(struct omap_vout_device *vout,
|
static int omapvid_setup_overlay(struct omap_vout_device *vout,
|
||||||
struct omap_overlay *ovl, int posx, int posy, int outw,
|
struct omap_overlay *ovl, int posx, int posy, int outw,
|
||||||
int outh, u32 addr)
|
int outh, u32 addr)
|
||||||
{
|
{
|
||||||
@@ -744,7 +635,7 @@ setup_ovl_err:
|
|||||||
/*
|
/*
|
||||||
* Initialize the overlay structure
|
* Initialize the overlay structure
|
||||||
*/
|
*/
|
||||||
int omapvid_init(struct omap_vout_device *vout, u32 addr)
|
static int omapvid_init(struct omap_vout_device *vout, u32 addr)
|
||||||
{
|
{
|
||||||
int ret = 0, i;
|
int ret = 0, i;
|
||||||
struct v4l2_window *win;
|
struct v4l2_window *win;
|
||||||
@@ -809,7 +700,7 @@ omapvid_init_err:
|
|||||||
/*
|
/*
|
||||||
* Apply the changes set the go bit of DSS
|
* Apply the changes set the go bit of DSS
|
||||||
*/
|
*/
|
||||||
int omapvid_apply_changes(struct omap_vout_device *vout)
|
static int omapvid_apply_changes(struct omap_vout_device *vout)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
struct omap_overlay *ovl;
|
struct omap_overlay *ovl;
|
||||||
@@ -825,7 +716,7 @@ int omapvid_apply_changes(struct omap_vout_device *vout)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void omap_vout_isr(void *arg, unsigned int irqstatus)
|
static void omap_vout_isr(void *arg, unsigned int irqstatus)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
u32 addr, fid;
|
u32 addr, fid;
|
||||||
|
@@ -27,6 +27,31 @@
|
|||||||
#define MAX_DISPLAYS 3
|
#define MAX_DISPLAYS 3
|
||||||
#define MAX_MANAGERS 3
|
#define MAX_MANAGERS 3
|
||||||
|
|
||||||
|
#define QQVGA_WIDTH 160
|
||||||
|
#define QQVGA_HEIGHT 120
|
||||||
|
|
||||||
|
/* Max Resolution supported by the driver */
|
||||||
|
#define VID_MAX_WIDTH 1280 /* Largest width */
|
||||||
|
#define VID_MAX_HEIGHT 720 /* Largest height */
|
||||||
|
|
||||||
|
/* Mimimum requirement is 2x2 for DSS */
|
||||||
|
#define VID_MIN_WIDTH 2
|
||||||
|
#define VID_MIN_HEIGHT 2
|
||||||
|
|
||||||
|
/* 2048 x 2048 is max res supported by OMAP display controller */
|
||||||
|
#define MAX_PIXELS_PER_LINE 2048
|
||||||
|
|
||||||
|
#define VRFB_TX_TIMEOUT 1000
|
||||||
|
#define VRFB_NUM_BUFS 4
|
||||||
|
|
||||||
|
/* Max buffer size tobe allocated during init */
|
||||||
|
#define OMAP_VOUT_MAX_BUF_SIZE (VID_MAX_WIDTH*VID_MAX_HEIGHT*4)
|
||||||
|
|
||||||
|
enum dma_channel_state {
|
||||||
|
DMA_CHAN_NOT_ALLOTED,
|
||||||
|
DMA_CHAN_ALLOTED,
|
||||||
|
};
|
||||||
|
|
||||||
/* Enum for Rotation
|
/* Enum for Rotation
|
||||||
* DSS understands rotation in 0, 1, 2, 3 context
|
* DSS understands rotation in 0, 1, 2, 3 context
|
||||||
* while V4L2 driver understands it as 0, 90, 180, 270
|
* while V4L2 driver understands it as 0, 90, 180, 270
|
||||||
@@ -144,4 +169,41 @@ struct omap_vout_device {
|
|||||||
int io_allowed;
|
int io_allowed;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return true if rotation is 90 or 270
|
||||||
|
*/
|
||||||
|
static inline int rotate_90_or_270(const struct omap_vout_device *vout)
|
||||||
|
{
|
||||||
|
return (vout->rotation == dss_rotation_90_degree ||
|
||||||
|
vout->rotation == dss_rotation_270_degree);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return true if rotation is enabled
|
||||||
|
*/
|
||||||
|
static inline int rotation_enabled(const struct omap_vout_device *vout)
|
||||||
|
{
|
||||||
|
return vout->rotation || vout->mirror;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reverse the rotation degree if mirroring is enabled
|
||||||
|
*/
|
||||||
|
static inline int calc_rotation(const struct omap_vout_device *vout)
|
||||||
|
{
|
||||||
|
if (!vout->mirror)
|
||||||
|
return vout->rotation;
|
||||||
|
|
||||||
|
switch (vout->rotation) {
|
||||||
|
case dss_rotation_90_degree:
|
||||||
|
return dss_rotation_270_degree;
|
||||||
|
case dss_rotation_270_degree:
|
||||||
|
return dss_rotation_90_degree;
|
||||||
|
case dss_rotation_180_degree:
|
||||||
|
return dss_rotation_0_degree;
|
||||||
|
default:
|
||||||
|
return dss_rotation_180_degree;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif /* ifndef OMAP_VOUTDEF_H */
|
#endif /* ifndef OMAP_VOUTDEF_H */
|
||||||
|
@@ -24,8 +24,12 @@
|
|||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/videodev2.h>
|
#include <linux/videodev2.h>
|
||||||
|
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
|
|
||||||
#include <plat/cpu.h>
|
#include <plat/cpu.h>
|
||||||
|
|
||||||
|
#include "omap_voutlib.h"
|
||||||
|
|
||||||
MODULE_AUTHOR("Texas Instruments");
|
MODULE_AUTHOR("Texas Instruments");
|
||||||
MODULE_DESCRIPTION("OMAP Video library");
|
MODULE_DESCRIPTION("OMAP Video library");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
@@ -291,3 +295,45 @@ void omap_vout_new_format(struct v4l2_pix_format *pix,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(omap_vout_new_format);
|
EXPORT_SYMBOL_GPL(omap_vout_new_format);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allocate buffers
|
||||||
|
*/
|
||||||
|
unsigned long omap_vout_alloc_buffer(u32 buf_size, u32 *phys_addr)
|
||||||
|
{
|
||||||
|
u32 order, size;
|
||||||
|
unsigned long virt_addr, addr;
|
||||||
|
|
||||||
|
size = PAGE_ALIGN(buf_size);
|
||||||
|
order = get_order(size);
|
||||||
|
virt_addr = __get_free_pages(GFP_KERNEL, order);
|
||||||
|
addr = virt_addr;
|
||||||
|
|
||||||
|
if (virt_addr) {
|
||||||
|
while (size > 0) {
|
||||||
|
SetPageReserved(virt_to_page(addr));
|
||||||
|
addr += PAGE_SIZE;
|
||||||
|
size -= PAGE_SIZE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*phys_addr = (u32) virt_to_phys((void *) virt_addr);
|
||||||
|
return virt_addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free buffers
|
||||||
|
*/
|
||||||
|
void omap_vout_free_buffer(unsigned long virtaddr, u32 buf_size)
|
||||||
|
{
|
||||||
|
u32 order, size;
|
||||||
|
unsigned long addr = virtaddr;
|
||||||
|
|
||||||
|
size = PAGE_ALIGN(buf_size);
|
||||||
|
order = get_order(size);
|
||||||
|
|
||||||
|
while (size > 0) {
|
||||||
|
ClearPageReserved(virt_to_page(addr));
|
||||||
|
addr += PAGE_SIZE;
|
||||||
|
size -= PAGE_SIZE;
|
||||||
|
}
|
||||||
|
free_pages((unsigned long) virtaddr, order);
|
||||||
|
}
|
||||||
|
@@ -12,23 +12,25 @@
|
|||||||
#ifndef OMAP_VOUTLIB_H
|
#ifndef OMAP_VOUTLIB_H
|
||||||
#define OMAP_VOUTLIB_H
|
#define OMAP_VOUTLIB_H
|
||||||
|
|
||||||
extern void omap_vout_default_crop(struct v4l2_pix_format *pix,
|
void omap_vout_default_crop(struct v4l2_pix_format *pix,
|
||||||
struct v4l2_framebuffer *fbuf, struct v4l2_rect *crop);
|
struct v4l2_framebuffer *fbuf, struct v4l2_rect *crop);
|
||||||
|
|
||||||
extern int omap_vout_new_crop(struct v4l2_pix_format *pix,
|
int omap_vout_new_crop(struct v4l2_pix_format *pix,
|
||||||
struct v4l2_rect *crop, struct v4l2_window *win,
|
struct v4l2_rect *crop, struct v4l2_window *win,
|
||||||
struct v4l2_framebuffer *fbuf,
|
struct v4l2_framebuffer *fbuf,
|
||||||
const struct v4l2_rect *new_crop);
|
const struct v4l2_rect *new_crop);
|
||||||
|
|
||||||
extern int omap_vout_try_window(struct v4l2_framebuffer *fbuf,
|
int omap_vout_try_window(struct v4l2_framebuffer *fbuf,
|
||||||
struct v4l2_window *new_win);
|
struct v4l2_window *new_win);
|
||||||
|
|
||||||
extern int omap_vout_new_window(struct v4l2_rect *crop,
|
int omap_vout_new_window(struct v4l2_rect *crop,
|
||||||
struct v4l2_window *win, struct v4l2_framebuffer *fbuf,
|
struct v4l2_window *win, struct v4l2_framebuffer *fbuf,
|
||||||
struct v4l2_window *new_win);
|
struct v4l2_window *new_win);
|
||||||
|
|
||||||
extern void omap_vout_new_format(struct v4l2_pix_format *pix,
|
void omap_vout_new_format(struct v4l2_pix_format *pix,
|
||||||
struct v4l2_framebuffer *fbuf, struct v4l2_rect *crop,
|
struct v4l2_framebuffer *fbuf, struct v4l2_rect *crop,
|
||||||
struct v4l2_window *win);
|
struct v4l2_window *win);
|
||||||
|
unsigned long omap_vout_alloc_buffer(u32 buf_size, u32 *phys_addr);
|
||||||
|
void omap_vout_free_buffer(unsigned long virtaddr, u32 buf_size);
|
||||||
#endif /* #ifndef OMAP_VOUTLIB_H */
|
#endif /* #ifndef OMAP_VOUTLIB_H */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user