Commit a137ac87 authored by archit taneja's avatar archit taneja Committed by Mauro Carvalho Chehab

[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: default avatarArchit Taneja <archit@ti.com>
Signed-off-by: default avatarVaibhav Hiremath <hvaibhav@ti.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent e213e438
...@@ -35,17 +35,14 @@ ...@@ -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"); ...@@ -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 { ...@@ -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[] = { ...@@ -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) ...@@ -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) ...@@ -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 @@ int omapvid_setup_overlay(struct omap_vout_device *vout, ...@@ -744,7 +635,7 @@ int omapvid_setup_overlay(struct omap_vout_device *vout,
/* /*
* 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 @@ int omapvid_init(struct omap_vout_device *vout, u32 addr) ...@@ -809,7 +700,7 @@ int omapvid_init(struct omap_vout_device *vout, u32 addr)
/* /*
* 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) ...@@ -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 @@ ...@@ -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 { ...@@ -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 @@ ...@@ -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, ...@@ -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 @@ ...@@ -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 */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment