| 
									
										
										
										
											2006-03-25 10:26:09 -03:00
										 |  |  | /* cx25840 internal API header
 | 
					
						
							| 
									
										
										
										
											2005-11-13 16:07:56 -08: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 10:26:09 -03:00
										 |  |  | #ifndef _CX25840_CORE_H_
 | 
					
						
							|  |  |  | #define _CX25840_CORE_H_
 | 
					
						
							| 
									
										
										
										
											2005-11-13 16:07:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-01-09 15:53:26 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-11-13 16:07:56 -08:00
										 |  |  | #include <linux/videodev2.h>
 | 
					
						
							| 
									
										
										
										
											2008-11-29 12:50:06 -03:00
										 |  |  | #include <media/v4l2-device.h>
 | 
					
						
							| 
									
										
										
										
											2010-08-06 10:55:39 -03:00
										 |  |  | #include <media/v4l2-ctrls.h>
 | 
					
						
							| 
									
										
										
										
											2005-11-13 16:07:56 -08:00
										 |  |  | #include <linux/i2c.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-18 22:08:03 -03:00
										 |  |  | struct cx25840_ir_state; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-29 06:59:52 -03:00
										 |  |  | enum cx25840_model { | 
					
						
							|  |  |  | 	CX23885_AV, | 
					
						
							|  |  |  | 	CX23887_AV, | 
					
						
							|  |  |  | 	CX23888_AV, | 
					
						
							|  |  |  | 	CX2310X_AV, | 
					
						
							|  |  |  | 	CX25840, | 
					
						
							|  |  |  | 	CX25841, | 
					
						
							|  |  |  | 	CX25842, | 
					
						
							|  |  |  | 	CX25843, | 
					
						
							|  |  |  | 	CX25836, | 
					
						
							|  |  |  | 	CX25837, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-11-13 16:07:56 -08:00
										 |  |  | struct cx25840_state { | 
					
						
							| 
									
										
										
										
											2007-08-26 10:53:16 -03:00
										 |  |  | 	struct i2c_client *c; | 
					
						
							| 
									
										
										
										
											2008-11-29 12:50:06 -03:00
										 |  |  | 	struct v4l2_subdev sd; | 
					
						
							| 
									
										
										
										
											2010-08-06 10:55:39 -03:00
										 |  |  | 	struct v4l2_ctrl_handler hdl; | 
					
						
							|  |  |  | 	struct { | 
					
						
							|  |  |  | 		/* volume cluster */ | 
					
						
							|  |  |  | 		struct v4l2_ctrl *volume; | 
					
						
							|  |  |  | 		struct v4l2_ctrl *mute; | 
					
						
							|  |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2006-01-09 15:25:42 -02:00
										 |  |  | 	int pvr150_workaround; | 
					
						
							| 
									
										
										
										
											2006-01-09 15:25:44 -02:00
										 |  |  | 	int radio; | 
					
						
							| 
									
										
										
										
											2008-04-22 14:45:51 -03:00
										 |  |  | 	v4l2_std_id std; | 
					
						
							| 
									
										
										
										
											2006-01-09 15:25:42 -02:00
										 |  |  | 	enum cx25840_video_input vid_input; | 
					
						
							|  |  |  | 	enum cx25840_audio_input aud_input; | 
					
						
							| 
									
										
										
										
											2006-01-09 15:25:41 -02:00
										 |  |  | 	u32 audclk_freq; | 
					
						
							| 
									
										
										
										
											2006-01-23 17:11:09 -02:00
										 |  |  | 	int audmode; | 
					
						
							| 
									
										
										
										
											2006-05-24 10:16:45 -03:00
										 |  |  | 	int vbi_line_offset; | 
					
						
							| 
									
										
										
										
											2013-05-29 06:59:52 -03:00
										 |  |  | 	enum cx25840_model id; | 
					
						
							| 
									
										
										
										
											2007-04-27 12:31:08 -03:00
										 |  |  | 	u32 rev; | 
					
						
							| 
									
										
										
										
											2007-07-22 12:52:40 -03:00
										 |  |  | 	int is_initialized; | 
					
						
							| 
									
										
										
										
											2007-08-26 10:53:16 -03: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-18 22:08:03 -03:00
										 |  |  | 	struct cx25840_ir_state *ir_state; | 
					
						
							| 
									
										
										
										
											2005-11-13 16:07:56 -08:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-29 12: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 10:55:39 -03:00
										 |  |  | static inline struct v4l2_subdev *to_sd(struct v4l2_ctrl *ctrl) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return &container_of(ctrl->handler, struct cx25840_state, hdl)->sd; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-26 23:47:21 -03:00
										 |  |  | static inline bool is_cx2583x(struct cx25840_state *state) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2013-05-29 06:59:52 -03:00
										 |  |  | 	return state->id == CX25836 || | 
					
						
							|  |  |  | 	       state->id == CX25837; | 
					
						
							| 
									
										
										
										
											2009-09-26 23:47:21 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline bool is_cx231xx(struct cx25840_state *state) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2013-05-29 06:59:52 -03:00
										 |  |  | 	return state->id == CX2310X_AV; | 
					
						
							| 
									
										
										
										
											2009-09-26 23:47:21 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline bool is_cx2388x(struct cx25840_state *state) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2013-05-29 06:59:52 -03:00
										 |  |  | 	return state->id == CX23885_AV || | 
					
						
							|  |  |  | 	       state->id == CX23887_AV || | 
					
						
							|  |  |  | 	       state->id == CX23888_AV; | 
					
						
							| 
									
										
										
										
											2009-09-26 23:47:21 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-18 22:08:03 -03:00
										 |  |  | static inline bool is_cx23885(struct cx25840_state *state) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2013-05-29 06:59:52 -03:00
										 |  |  | 	return state->id == CX23885_AV; | 
					
						
							| 
									
										
										
										
											2010-07-18 22:08:03 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline bool is_cx23887(struct cx25840_state *state) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2013-05-29 06:59:52 -03:00
										 |  |  | 	return state->id == CX23887_AV; | 
					
						
							| 
									
										
										
										
											2010-07-18 22:08:03 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline bool is_cx23888(struct cx25840_state *state) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2013-05-29 06:59:52 -03:00
										 |  |  | 	return state->id == CX23888_AV; | 
					
						
							| 
									
										
										
										
											2010-07-18 22:08:03 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-11-13 16:07:56 -08: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 10:22:46 -03:00
										 |  |  | int cx25840_and_or(struct i2c_client *client, u16 addr, unsigned mask, u8 value); | 
					
						
							| 
									
										
										
										
											2010-07-18 22:08:03 -03:00
										 |  |  | int cx25840_and_or4(struct i2c_client *client, u16 addr, u32 and_mask, | 
					
						
							|  |  |  | 		    u32 or_value); | 
					
						
							| 
									
										
										
										
											2008-07-17 11:08:40 -03:00
										 |  |  | void cx25840_std_setup(struct i2c_client *client); | 
					
						
							| 
									
										
										
										
											2005-11-13 16:07:56 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* ----------------------------------------------------------------------- */ | 
					
						
							|  |  |  | /* cx25850-firmware.c                                                      */ | 
					
						
							|  |  |  | int cx25840_loadfw(struct i2c_client *client); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ----------------------------------------------------------------------- */ | 
					
						
							|  |  |  | /* cx25850-audio.c                                                         */ | 
					
						
							| 
									
										
										
										
											2006-01-09 15:25:42 -02:00
										 |  |  | void cx25840_audio_set_path(struct i2c_client *client); | 
					
						
							| 
									
										
										
										
											2009-03-30 06:26:40 -03:00
										 |  |  | int cx25840_s_clock_freq(struct v4l2_subdev *sd, u32 freq); | 
					
						
							| 
									
										
										
										
											2010-08-06 10:55:39 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | extern const struct v4l2_ctrl_ops cx25840_audio_ctrl_ops; | 
					
						
							| 
									
										
										
										
											2005-11-13 16:07:56 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* ----------------------------------------------------------------------- */ | 
					
						
							|  |  |  | /* cx25850-vbi.c                                                           */ | 
					
						
							| 
									
										
										
										
											2010-03-14 10: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 06:26:40 -03:00
										 |  |  | int cx25840_decode_vbi_line(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi); | 
					
						
							| 
									
										
										
										
											2005-11-13 16:07:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-18 22:08:03 -03: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-13 16:07:56 -08:00
										 |  |  | #endif
 |