M7350/kernel/drivers/video/msm/ba/msm_ba_internal.h
2024-09-09 08:57:42 +00:00

215 lines
4.1 KiB
C

/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef _MSM_BA_INTERNAL_H_
#define _MSM_BA_INTERNAL_H_
#include <linux/atomic.h>
#include <linux/list.h>
#include <linux/time.h>
#include <linux/types.h>
#include <linux/completion.h>
#include <linux/wait.h>
#include <linux/workqueue.h>
#include <linux/msm-bus.h>
#include <linux/msm-bus-board.h>
#include <media/v4l2-dev.h>
#include <media/v4l2-device.h>
#include <media/v4l2-ioctl.h>
#include <media/v4l2-event.h>
#include <media/v4l2-ctrls.h>
#include <media/videobuf2-core.h>
#include <media/msm_ba.h>
#define MSM_BA_DRV_NAME "msm_ba_driver"
#define MSM_BA_VERSION KERNEL_VERSION(0, 0, 1)
#define MAX_NAME_LENGTH 64
#define MAX_DEBUGFS_NAME MAX_NAME_LENGTH
#define DEFAULT_WIDTH 720
#define DEFAULT_HEIGHT 507
enum ba_dev_state {
BA_DEV_UNINIT = 0,
BA_DEV_INIT,
BA_DEV_INIT_DONE,
BA_DEV_INVALID
};
enum instance_state {
MSM_BA_DEV_UNINIT_DONE = 0x0001,
MSM_BA_DEV_INIT,
MSM_BA_DEV_INIT_DONE,
MSM_BA_OPEN,
MSM_BA_OPEN_DONE,
MSM_BA_START,
MSM_BA_START_DONE,
MSM_BA_STOP,
MSM_BA_STOP_DONE,
MSM_BA_CLOSE,
MSM_BA_CLOSE_DONE,
MSM_BA_DEV_UNINIT,
MSM_BA_DEV_INVALID
};
struct ba_ctxt {
struct mutex ba_cs;
struct msm_ba_dev *dev_ctxt;
struct dentry *debugfs_root;
};
enum profiling_points {
SYS_INIT = 0,
SESSION_INIT,
MAX_PROFILING_POINTS
};
struct profile_data {
int start;
int stop;
int cumulative;
char name[64];
int sampling;
int average;
};
struct msm_ba_debug {
struct profile_data pdata[MAX_PROFILING_POINTS];
int profile;
int samples;
};
struct msm_ba_dev_capability {
u32 capability_set;
};
enum msm_ba_ip_type {
BA_INPUT_CVBS = 0,
BA_INPUT_COMPONENT,
BA_INPUT_YC,
BA_INPUT_RGB,
BA_INPUT_HDMI,
BA_INPUT_MHL,
BA_INPUT_DVI,
BA_INPUT_TTL,
BA_INPUT_MAX = 0xffffffff
};
struct msm_ba_input_config {
enum msm_ba_ip_type inputType;
unsigned int index;
const char *name;
int ba_ip;
int ba_out;
const char *sd_name;
int signal_status;
};
struct msm_ba_sd_event {
struct list_head list;
struct v4l2_event sd_event;
};
struct msm_ba_input {
struct list_head list;
enum msm_ba_ip_type inputType;
unsigned int name_index;
char name[32];
int bridge_chip_ip;
int ba_node_addr;
int ba_out;
int ba_ip_idx;
struct v4l2_subdev *sd;
int signal_status;
int in_use;
int ba_out_in_use;
enum v4l2_priority prio;
};
struct msm_ba_dev {
struct mutex dev_cs;
enum ba_dev_state state;
struct list_head inputs;
uint32_t num_inputs;
/* V4L2 Framework */
struct v4l2_device v4l2_dev;
struct video_device *vdev;
struct media_device mdev;
struct list_head instances;
/* BA v4l2 sub devs */
uint32_t num_ba_subdevs;
struct list_head sd_events;
struct delayed_work sd_events_work;
struct dentry *debugfs_root;
};
struct msm_ba_inst {
struct list_head list;
struct mutex inst_cs;
struct msm_ba_dev *dev_ctxt;
struct v4l2_input sd_input;
/* current input priority */
enum v4l2_priority input_prio;
struct v4l2_output sd_output;
struct v4l2_subdev *sd;
int state;
int saved_input;
int restore;
struct v4l2_fh event_handler;
wait_queue_head_t kernel_event_queue;
struct v4l2_ctrl **cluster;
struct v4l2_ctrl_handler ctrl_handler;
struct v4l2_ctrl **ctrls;
struct msm_ba_debug debug;
struct dentry *debugfs_root;
const struct msm_ba_ext_ops *ext_ops;
};
struct msm_ba_ctrl {
u32 id;
char name[MAX_NAME_LENGTH];
enum v4l2_ctrl_type type;
s32 minimum;
s32 maximum;
s32 default_value;
u32 step;
u32 menu_skip_mask;
u32 flags;
const char * const *qmenu;
};
struct ba_ctxt *msm_ba_get_ba_context(void);
void msm_ba_subdev_event_hndlr(struct v4l2_subdev *sd,
unsigned int notification, void *arg);
void msm_ba_subdev_event_hndlr_delayed(struct work_struct *work);
#endif