blob: 3b818214a48ffebe5615f15f3b6014fcc94f727b [file]
/*
* include/linux/amlogic/media/vout/vout_notify.h
*
* Copyright (C) 2017 Amlogic, Inc. 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 as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* 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 _VOUT_NOTIFY_H_
#define _VOUT_NOTIFY_H_
/* Linux Headers */
#include <linux/notifier.h>
#include <linux/list.h>
#include <linux/pm.h>
/* Local Headers */
#include "vinfo.h"
struct vframe_match_s {
int fps;
int frame_rate; /* *100 */
unsigned int duration_num;
unsigned int duration_den;
};
struct vout_op_s {
struct vinfo_s *(*get_vinfo)(void);
int (*set_vmode)(enum vmode_e);
enum vmode_e (*validate_vmode)(char *name, unsigned int frac);
int (*check_same_vmodeattr)(char *name);
int (*vmode_is_supported)(enum vmode_e);
int (*disable)(enum vmode_e);
int (*set_state)(int);
int (*clr_state)(int);
int (*get_state)(void);
int (*get_disp_cap)(char *buf);
int (*set_vframe_rate_hint)(int);
int (*get_vframe_rate_hint)(void);
void (*set_bist)(unsigned int);
int (*vout_suspend)(void);
int (*vout_resume)(void);
int (*vout_shutdown)(void);
};
struct vout_server_s {
struct list_head list;
char *name;
struct vout_op_s op;
};
struct vout_module_s {
struct list_head vout_server_list;
struct vout_server_s *curr_vout_server;
unsigned int init_flag;
/* fr_policy: 0=disable, 1=nearby, 2=force */
unsigned int fr_policy;
};
extern int vout_register_client(struct notifier_block *p);
extern int vout_unregister_client(struct notifier_block *p);
extern int vout_notifier_call_chain(unsigned int long, void *p);
extern int vout_register_server(struct vout_server_s *p);
extern int vout_unregister_server(struct vout_server_s *p);
int get_vout_disp_cap(char *buf);
extern struct vinfo_s *get_current_vinfo(void);
extern enum vmode_e get_current_vmode(void);
int set_vframe_rate_hint(int duration);
int get_vframe_rate_hint(void);
extern int set_vframe_rate_policy(int pol);
extern int get_vframe_rate_policy(void);
extern void set_vout_bist(unsigned int bist);
int set_vframe_rate_end_hint(void);
#ifdef CONFIG_AMLOGIC_VOUT2_SERVE
extern int vout2_register_client(struct notifier_block *p);
extern int vout2_unregister_client(struct notifier_block *p);
extern int vout2_notifier_call_chain(unsigned int long, void *p);
extern int vout2_register_server(struct vout_server_s *p);
extern int vout2_unregister_server(struct vout_server_s *p);
int get_vout2_disp_cap(char *buf);
extern struct vinfo_s *get_current_vinfo2(void);
extern enum vmode_e get_current_vmode2(void);
int set_vframe2_rate_hint(int duration);
int get_vframe2_rate_hint(void);
extern int set_vframe2_rate_policy(int pol);
extern int get_vframe2_rate_policy(void);
extern void set_vout2_bist(unsigned int bist);
int set_vframe2_rate_end_hint(void);
#endif
/* vdac ctrl,adc/dac ref signal,cvbs out signal
* module index: atv demod:0x01; dtv demod:0x02; tvafe:0x4; dac:0x8
*/
extern void vdac_enable(bool on, unsigned int module_sel);
#define VOUT_EVENT_MODE_CHANGE_PRE 0x00010000
#define VOUT_EVENT_MODE_CHANGE 0x00020000
#define VOUT_EVENT_OSD_BLANK 0x00030000
#define VOUT_EVENT_OSD_DISP_AXIS 0x00040000
#define VOUT_EVENT_OSD_PREBLEND_ENABLE 0x00050000
#define VOUT_EVENT_SYS_INIT 0x00060000
/* ********** vout_ioctl ********** */
#define VOUT_IOC_TYPE 'C'
#define VOUT_IOC_NR_GET_VINFO 0x0
#define VOUT_IOC_NR_SET_VINFO 0x1
#define VOUT_IOC_CMD_GET_VINFO \
_IOR(VOUT_IOC_TYPE, VOUT_IOC_NR_GET_VINFO, struct vinfo_base_s)
#define VOUT_IOC_CMD_SET_VINFO \
_IOW(VOUT_IOC_TYPE, VOUT_IOC_NR_SET_VINFO, struct vinfo_base_s)
/* ******************************** */
extern char *get_vout_mode_internal(void);
extern char *get_vout_mode_uboot(void);
extern int set_vout_mode(char *name);
extern void set_vout_init(enum vmode_e mode);
extern void update_vout_viu(void);
extern int set_vout_vmode(enum vmode_e mode);
enum vmode_e validate_vmode(char *name, unsigned int frac);
extern int set_current_vmode(enum vmode_e mode);
#endif /* _VOUT_NOTIFY_H_ */