2006-03-25 16:26:09 +03:00
/* cx25840 internal API header
2005-11-14 03:07:56 +03:00
*
* Copyright ( C ) 2003 - 2004 Chris Kennedy
*
* 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 .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
*/
2006-03-25 16:26:09 +03:00
# ifndef _CX25840_CORE_H_
# define _CX25840_CORE_H_
2005-11-14 03:07:56 +03:00
2006-01-09 20:53:26 +03:00
2005-11-14 03:07:56 +03:00
# include <linux/videodev2.h>
2008-11-29 18:50:06 +03:00
# include <media/v4l2-device.h>
2009-09-27 06:47:21 +04:00
# include <media/v4l2-chip-ident.h>
2010-08-06 17:55:39 +04:00
# include <media/v4l2-ctrls.h>
2005-11-14 03:07:56 +03:00
# include <linux/i2c.h>
2010-07-19 05:08:03 +04:00
struct cx25840_ir_state ;
2005-11-14 03:07:56 +03:00
struct cx25840_state {
2007-08-26 17:53:16 +04:00
struct i2c_client * c ;
2008-11-29 18:50:06 +03:00
struct v4l2_subdev sd ;
2010-08-06 17:55:39 +04:00
struct v4l2_ctrl_handler hdl ;
struct {
/* volume cluster */
struct v4l2_ctrl * volume ;
struct v4l2_ctrl * mute ;
} ;
2006-01-09 20:25:42 +03:00
int pvr150_workaround ;
2006-01-09 20:25:44 +03:00
int radio ;
2008-04-22 21:45:51 +04:00
v4l2_std_id std ;
2006-01-09 20:25:42 +03:00
enum cx25840_video_input vid_input ;
enum cx25840_audio_input aud_input ;
2006-01-09 20:25:41 +03:00
u32 audclk_freq ;
2006-01-23 22:11:09 +03:00
int audmode ;
2006-05-24 17:16:45 +04:00
int vbi_line_offset ;
2007-04-27 19:31:08 +04:00
u32 id ;
u32 rev ;
2007-07-22 19:52:40 +04:00
int is_initialized ;
2007-08-26 17:53:16 +04:00
wait_queue_head_t fw_wait ; /* wake up when the fw load is finished */
struct work_struct fw_work ; /* work entry for fw load */
2010-07-19 05:08:03 +04:00
struct cx25840_ir_state * ir_state ;
2005-11-14 03:07:56 +03:00
} ;
2008-11-29 18:50:06 +03:00
static inline struct cx25840_state * to_state ( struct v4l2_subdev * sd )
{
return container_of ( sd , struct cx25840_state , sd ) ;
}
2010-08-06 17:55:39 +04:00
static inline struct v4l2_subdev * to_sd ( struct v4l2_ctrl * ctrl )
{
return & container_of ( ctrl - > handler , struct cx25840_state , hdl ) - > sd ;
}
2009-09-27 06:47:21 +04:00
static inline bool is_cx2583x ( struct cx25840_state * state )
{
return state - > id = = V4L2_IDENT_CX25836 | |
state - > id = = V4L2_IDENT_CX25837 ;
}
static inline bool is_cx231xx ( struct cx25840_state * state )
{
return state - > id = = V4L2_IDENT_CX2310X_AV ;
}
static inline bool is_cx2388x ( struct cx25840_state * state )
{
return state - > id = = V4L2_IDENT_CX23885_AV | |
state - > id = = V4L2_IDENT_CX23887_AV | |
state - > id = = V4L2_IDENT_CX23888_AV ;
}
2010-07-19 05:08:03 +04:00
static inline bool is_cx23885 ( struct cx25840_state * state )
{
return state - > id = = V4L2_IDENT_CX23885_AV ;
}
static inline bool is_cx23887 ( struct cx25840_state * state )
{
return state - > id = = V4L2_IDENT_CX23887_AV ;
}
static inline bool is_cx23888 ( struct cx25840_state * state )
{
return state - > id = = V4L2_IDENT_CX23888_AV ;
}
2005-11-14 03:07:56 +03:00
/* ----------------------------------------------------------------------- */
/* cx25850-core.c */
int cx25840_write ( struct i2c_client * client , u16 addr , u8 value ) ;
int cx25840_write4 ( struct i2c_client * client , u16 addr , u32 value ) ;
u8 cx25840_read ( struct i2c_client * client , u16 addr ) ;
u32 cx25840_read4 ( struct i2c_client * client , u16 addr ) ;
2006-04-22 17:22:46 +04:00
int cx25840_and_or ( struct i2c_client * client , u16 addr , unsigned mask , u8 value ) ;
2010-07-19 05:08:03 +04:00
int cx25840_and_or4 ( struct i2c_client * client , u16 addr , u32 and_mask ,
u32 or_value ) ;
2008-07-17 18:08:40 +04:00
void cx25840_std_setup ( struct i2c_client * client ) ;
2005-11-14 03:07:56 +03:00
/* ----------------------------------------------------------------------- */
/* cx25850-firmware.c */
int cx25840_loadfw ( struct i2c_client * client ) ;
/* ----------------------------------------------------------------------- */
/* cx25850-audio.c */
2006-01-09 20:25:42 +03:00
void cx25840_audio_set_path ( struct i2c_client * client ) ;
2009-03-30 13:26:40 +04:00
int cx25840_s_clock_freq ( struct v4l2_subdev * sd , u32 freq ) ;
2010-08-06 17:55:39 +04:00
extern const struct v4l2_ctrl_ops cx25840_audio_ctrl_ops ;
2005-11-14 03:07:56 +03:00
/* ----------------------------------------------------------------------- */
/* cx25850-vbi.c */
2010-03-14 16:16:46 +03:00
int cx25840_s_raw_fmt ( struct v4l2_subdev * sd , struct v4l2_vbi_format * fmt ) ;
int cx25840_s_sliced_fmt ( struct v4l2_subdev * sd , struct v4l2_sliced_vbi_format * fmt ) ;
int cx25840_g_sliced_fmt ( struct v4l2_subdev * sd , struct v4l2_sliced_vbi_format * fmt ) ;
2009-03-30 13:26:40 +04:00
int cx25840_decode_vbi_line ( struct v4l2_subdev * sd , struct v4l2_decode_vbi_line * vbi ) ;
2005-11-14 03:07:56 +03:00
2010-07-19 05:08:03 +04:00
/* ----------------------------------------------------------------------- */
/* cx25850-ir.c */
extern const struct v4l2_subdev_ir_ops cx25840_ir_ops ;
int cx25840_ir_log_status ( struct v4l2_subdev * sd ) ;
int cx25840_ir_irq_handler ( struct v4l2_subdev * sd , u32 status , bool * handled ) ;
int cx25840_ir_probe ( struct v4l2_subdev * sd ) ;
int cx25840_ir_remove ( struct v4l2_subdev * sd ) ;
2005-11-14 03:07:56 +03:00
# endif