cregit-Linux how code gets into the kernel

Release 4.7 drivers/media/platform/am437x/am437x-vpfe.h

/*
 * Copyright (C) 2013 - 2014 Texas Instruments, Inc.
 *
 * Benoit Parrot <bparrot@ti.com>
 * Lad, Prabhakar <prabhakar.csengg@gmail.com>
 *
 * This program is free software; you may redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 2 of the License.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

#ifndef AM437X_VPFE_H

#define AM437X_VPFE_H

#include <linux/am437x-vpfe.h>
#include <linux/clk.h>
#include <linux/device.h>
#include <linux/io.h>
#include <linux/i2c.h>
#include <linux/videodev2.h>

#include <media/v4l2-dev.h>
#include <media/v4l2-device.h>
#include <media/v4l2-ioctl.h>
#include <media/videobuf2-v4l2.h>
#include <media/videobuf2-dma-contig.h>

#include "am437x-vpfe_regs.h"


enum vpfe_pin_pol {
	
VPFE_PINPOL_POSITIVE = 0,
	
VPFE_PINPOL_NEGATIVE,
};


enum vpfe_hw_if_type {
	/* Raw Bayer */
	
VPFE_RAW_BAYER = 0,
	/* BT656 - 8 bit */
	
VPFE_BT656,
	/* BT656 - 10 bit */
	
VPFE_BT656_10BIT,
	/* YCbCr - 8 bit with external sync */
	
VPFE_YCBCR_SYNC_8,
	/* YCbCr - 16 bit with external sync */
	
VPFE_YCBCR_SYNC_16,
};

/* interface description */

struct vpfe_hw_if_param {
	
enum vpfe_hw_if_type if_type;
	
enum vpfe_pin_pol hdpol;
	
enum vpfe_pin_pol vdpol;
	
unsigned int bus_width;
};


#define VPFE_MAX_SUBDEV		1

#define VPFE_MAX_INPUTS		1


struct vpfe_pixel_format {
	
struct v4l2_fmtdesc fmtdesc;
	/* bytes per pixel */
	
int bpp;
};


struct vpfe_std_info {
	
int active_pixels;
	
int active_lines;
	/* current frame format */
	
int frame_format;
};


struct vpfe_route {
	
u32 input;
	
u32 output;
};


struct vpfe_subdev_info {
	/* Sub device group id */
	
int grp_id;
	/* inputs available at the sub device */
	
struct v4l2_input inputs[VPFE_MAX_INPUTS];
	/* Sub dev routing information for each input */
	
struct vpfe_route *routes;
	/* check if sub dev supports routing */
	
int can_route;
	/* ccdc bus/interface configuration */
	
struct vpfe_hw_if_param vpfe_param;
	
struct v4l2_subdev *sd;
};


struct vpfe_config {
	/* information about each subdev */
	
struct vpfe_subdev_info sub_devs[VPFE_MAX_SUBDEV];
	/* Flat array, arranged in groups */
	
struct v4l2_async_subdev *asd[VPFE_MAX_SUBDEV];
};


struct vpfe_cap_buffer {
	
struct vb2_v4l2_buffer vb;
	
struct list_head list;
};


enum ccdc_pixfmt {
	
CCDC_PIXFMT_RAW = 0,
	
CCDC_PIXFMT_YCBCR_16BIT,
	
CCDC_PIXFMT_YCBCR_8BIT,
};


enum ccdc_frmfmt {
	
CCDC_FRMFMT_PROGRESSIVE = 0,
	
CCDC_FRMFMT_INTERLACED,
};

/* PIXEL ORDER IN MEMORY from LSB to MSB */
/* only applicable for 8-bit input mode  */

enum ccdc_pixorder {
	
CCDC_PIXORDER_YCBYCR,
	
CCDC_PIXORDER_CBYCRY,
};


enum ccdc_buftype {
	
CCDC_BUFTYPE_FLD_INTERLEAVED,
	
CCDC_BUFTYPE_FLD_SEPARATED
};


/* returns the highest bit used for the gamma */

static inline u8 ccdc_gamma_width_max_bit(enum vpfe_ccdc_gamma_width width) { return 15 - width; }

Contributors

PersonTokensPropCommitsCommitProp
benoit parrotbenoit parrot16100.00%1100.00%
Total16100.00%1100.00%

/* returns the highest bit used for this data size */
static inline u8 ccdc_data_size_max_bit(enum vpfe_ccdc_data_size sz) { return sz == VPFE_CCDC_DATA_8BITS ? 7 : 15 - sz; }

Contributors

PersonTokensPropCommitsCommitProp
benoit parrotbenoit parrot22100.00%1100.00%
Total22100.00%1100.00%

/* Structure for CCDC configuration parameters for raw capture mode */ struct ccdc_params_raw { /* pixel format */ enum ccdc_pixfmt pix_fmt; /* progressive or interlaced frame */ enum ccdc_frmfmt frm_fmt; struct v4l2_rect win; /* Current Format Bytes Per Pixels */ unsigned int bytesperpixel; /* Current Format Bytes per Lines * (Aligned to 32 bytes) used for HORZ_INFO */ unsigned int bytesperline; /* field id polarity */ enum vpfe_pin_pol fid_pol; /* vertical sync polarity */ enum vpfe_pin_pol vd_pol; /* horizontal sync polarity */ enum vpfe_pin_pol hd_pol; /* interleaved or separated fields */ enum ccdc_buftype buf_type; /* * enable to store the image in inverse * order in memory(bottom to top) */ unsigned char image_invert_enable; /* configurable parameters */ struct vpfe_ccdc_config_params_raw config_params; }; struct ccdc_params_ycbcr { /* pixel format */ enum ccdc_pixfmt pix_fmt; /* progressive or interlaced frame */ enum ccdc_frmfmt frm_fmt; struct v4l2_rect win; /* Current Format Bytes Per Pixels */ unsigned int bytesperpixel; /* Current Format Bytes per Lines * (Aligned to 32 bytes) used for HORZ_INFO */ unsigned int bytesperline; /* field id polarity */ enum vpfe_pin_pol fid_pol; /* vertical sync polarity */ enum vpfe_pin_pol vd_pol; /* horizontal sync polarity */ enum vpfe_pin_pol hd_pol; /* enable BT.656 embedded sync mode */ int bt656_enable; /* cb:y:cr:y or y:cb:y:cr in memory */ enum ccdc_pixorder pix_order; /* interleaved or separated fields */ enum ccdc_buftype buf_type; }; /* * CCDC operational configuration */ struct ccdc_config { /* CCDC interface type */ enum vpfe_hw_if_type if_type; /* Raw Bayer configuration */ struct ccdc_params_raw bayer; /* YCbCr configuration */ struct ccdc_params_ycbcr ycbcr; /* ccdc base address */ void __iomem *base_addr; }; struct vpfe_ccdc { struct ccdc_config ccdc_cfg; u32 ccdc_ctx[VPFE_REG_END / sizeof(u32)]; }; struct vpfe_device { /* V4l2 specific parameters */ /* Identifies video device for this channel */ struct video_device video_dev; /* sub devices */ struct v4l2_subdev **sd; /* vpfe cfg */ struct vpfe_config *cfg; /* V4l2 device */ struct v4l2_device v4l2_dev; /* parent device */ struct device *pdev; /* subdevice async Notifier */ struct v4l2_async_notifier notifier; /* Indicates id of the field which is being displayed */ unsigned field; unsigned sequence; /* current interface type */ struct vpfe_hw_if_param vpfe_if_params; /* ptr to currently selected sub device */ struct vpfe_subdev_info *current_subdev; /* current input at the sub device */ int current_input; /* Keeps track of the information about the standard */ struct vpfe_std_info std_info; /* std index into std table */ int std_index; /* IRQs used when CCDC output to SDRAM */ unsigned int irq; /* Pointer pointing to current v4l2_buffer */ struct vpfe_cap_buffer *cur_frm; /* Pointer pointing to next v4l2_buffer */ struct vpfe_cap_buffer *next_frm; /* Used to store pixel format */ struct v4l2_format fmt; /* Used to store current bytes per pixel based on current format */ unsigned int bpp; /* * used when IMP is chained to store the crop window which * is different from the image window */ struct v4l2_rect crop; /* Buffer queue used in video-buf */ struct vb2_queue buffer_queue; /* Allocator-specific contexts for each plane */ struct vb2_alloc_ctx *alloc_ctx; /* Queue of filled frames */ struct list_head dma_queue; /* IRQ lock for DMA queue */ spinlock_t dma_queue_lock; /* lock used to access this structure */ struct mutex lock; /* * offset where second field starts from the starting of the * buffer for field separated YCbCr formats */ u32 field_off; struct vpfe_ccdc ccdc; }; #endif /* AM437X_VPFE_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
benoit parrotbenoit parrot59599.33%150.00%
junghak sungjunghak sung40.67%150.00%
Total599100.00%2100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}