diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/videodev2.h | 7 | ||||
| -rw-r--r-- | include/media/cx25840.h | 1 | ||||
| -rw-r--r-- | include/media/davinci/vpfe_capture.h | 2 | ||||
| -rw-r--r-- | include/media/ir-common.h | 43 | ||||
| -rw-r--r-- | include/media/v4l2-chip-ident.h | 23 | ||||
| -rw-r--r-- | include/media/v4l2-subdev.h | 103 | ||||
| -rw-r--r-- | include/media/videobuf-core.h | 4 | ||||
| -rw-r--r-- | include/media/videobuf-dma-contig.h | 2 | ||||
| -rw-r--r-- | include/media/videobuf-dma-sg.h | 2 | ||||
| -rw-r--r-- | include/media/videobuf-dvb.h | 4 | ||||
| -rw-r--r-- | include/media/videobuf-vmalloc.h | 4 |
11 files changed, 171 insertions, 24 deletions
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index dfd4745a955f..32b92298fd79 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
| @@ -361,6 +361,7 @@ struct v4l2_pix_format { | |||
| 361 | #define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */ | 361 | #define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */ |
| 362 | #define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */ | 362 | #define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */ |
| 363 | #define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */ | 363 | #define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */ |
| 364 | #define V4L2_PIX_FMT_STV0680 v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */ | ||
| 364 | 365 | ||
| 365 | /* | 366 | /* |
| 366 | * F O R M A T E N U M E R A T I O N | 367 | * F O R M A T E N U M E R A T I O N |
| @@ -563,6 +564,7 @@ struct v4l2_framebuffer { | |||
| 563 | #define V4L2_FBUF_CAP_LOCAL_ALPHA 0x0010 | 564 | #define V4L2_FBUF_CAP_LOCAL_ALPHA 0x0010 |
| 564 | #define V4L2_FBUF_CAP_GLOBAL_ALPHA 0x0020 | 565 | #define V4L2_FBUF_CAP_GLOBAL_ALPHA 0x0020 |
| 565 | #define V4L2_FBUF_CAP_LOCAL_INV_ALPHA 0x0040 | 566 | #define V4L2_FBUF_CAP_LOCAL_INV_ALPHA 0x0040 |
| 567 | #define V4L2_FBUF_CAP_SRC_CHROMAKEY 0x0080 | ||
| 566 | /* Flags for the 'flags' field. */ | 568 | /* Flags for the 'flags' field. */ |
| 567 | #define V4L2_FBUF_FLAG_PRIMARY 0x0001 | 569 | #define V4L2_FBUF_FLAG_PRIMARY 0x0001 |
| 568 | #define V4L2_FBUF_FLAG_OVERLAY 0x0002 | 570 | #define V4L2_FBUF_FLAG_OVERLAY 0x0002 |
| @@ -570,6 +572,7 @@ struct v4l2_framebuffer { | |||
| 570 | #define V4L2_FBUF_FLAG_LOCAL_ALPHA 0x0008 | 572 | #define V4L2_FBUF_FLAG_LOCAL_ALPHA 0x0008 |
| 571 | #define V4L2_FBUF_FLAG_GLOBAL_ALPHA 0x0010 | 573 | #define V4L2_FBUF_FLAG_GLOBAL_ALPHA 0x0010 |
| 572 | #define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA 0x0020 | 574 | #define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA 0x0020 |
| 575 | #define V4L2_FBUF_FLAG_SRC_CHROMAKEY 0x0040 | ||
| 573 | 576 | ||
| 574 | struct v4l2_clip { | 577 | struct v4l2_clip { |
| 575 | struct v4l2_rect c; | 578 | struct v4l2_rect c; |
| @@ -912,8 +915,10 @@ enum v4l2_colorfx { | |||
| 912 | #define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32) | 915 | #define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32) |
| 913 | #define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33) | 916 | #define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33) |
| 914 | 917 | ||
| 918 | #define V4L2_CID_ROTATE (V4L2_CID_BASE+34) | ||
| 919 | #define V4L2_CID_BG_COLOR (V4L2_CID_BASE+35) | ||
| 915 | /* last CID + 1 */ | 920 | /* last CID + 1 */ |
| 916 | #define V4L2_CID_LASTP1 (V4L2_CID_BASE+34) | 921 | #define V4L2_CID_LASTP1 (V4L2_CID_BASE+36) |
| 917 | 922 | ||
| 918 | /* MPEG-class control IDs defined by V4L2 */ | 923 | /* MPEG-class control IDs defined by V4L2 */ |
| 919 | #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) | 924 | #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) |
diff --git a/include/media/cx25840.h b/include/media/cx25840.h index 2c3fbaa33f74..0b0cb1776796 100644 --- a/include/media/cx25840.h +++ b/include/media/cx25840.h | |||
| @@ -84,6 +84,7 @@ enum cx25840_video_input { | |||
| 84 | CX25840_NONE0_CH3 = 0x80000080, | 84 | CX25840_NONE0_CH3 = 0x80000080, |
| 85 | CX25840_NONE1_CH3 = 0x800000c0, | 85 | CX25840_NONE1_CH3 = 0x800000c0, |
| 86 | CX25840_SVIDEO_ON = 0x80000100, | 86 | CX25840_SVIDEO_ON = 0x80000100, |
| 87 | CX25840_COMPONENT_ON = 0x80000200, | ||
| 87 | }; | 88 | }; |
| 88 | 89 | ||
| 89 | enum cx25840_audio_input { | 90 | enum cx25840_audio_input { |
diff --git a/include/media/davinci/vpfe_capture.h b/include/media/davinci/vpfe_capture.h index 71d8982e13ff..d863e5e8426d 100644 --- a/include/media/davinci/vpfe_capture.h +++ b/include/media/davinci/vpfe_capture.h | |||
| @@ -83,6 +83,8 @@ struct vpfe_subdev_info { | |||
| 83 | struct vpfe_config { | 83 | struct vpfe_config { |
| 84 | /* Number of sub devices connected to vpfe */ | 84 | /* Number of sub devices connected to vpfe */ |
| 85 | int num_subdevs; | 85 | int num_subdevs; |
| 86 | /* i2c bus adapter no */ | ||
| 87 | int i2c_adapter_id; | ||
| 86 | /* information about each subdev */ | 88 | /* information about each subdev */ |
| 87 | struct vpfe_subdev_info *sub_devs; | 89 | struct vpfe_subdev_info *sub_devs; |
| 88 | /* evm card info */ | 90 | /* evm card info */ |
diff --git a/include/media/ir-common.h b/include/media/ir-common.h index 29f0e53cff94..e41a99ee353e 100644 --- a/include/media/ir-common.h +++ b/include/media/ir-common.h | |||
| @@ -26,14 +26,16 @@ | |||
| 26 | #include <linux/input.h> | 26 | #include <linux/input.h> |
| 27 | #include <linux/workqueue.h> | 27 | #include <linux/workqueue.h> |
| 28 | #include <linux/interrupt.h> | 28 | #include <linux/interrupt.h> |
| 29 | #include <linux/spinlock.h> | ||
| 30 | |||
| 31 | extern int media_ir_debug; /* media_ir_debug level (0,1,2) */ | ||
| 32 | #define IR_dprintk(level, fmt, arg...) if (media_ir_debug >= level) \ | ||
| 33 | printk(KERN_DEBUG "%s: " fmt , __func__, ## arg) | ||
| 29 | 34 | ||
| 30 | #define IR_TYPE_RC5 1 | 35 | #define IR_TYPE_RC5 1 |
| 31 | #define IR_TYPE_PD 2 /* Pulse distance encoded IR */ | 36 | #define IR_TYPE_PD 2 /* Pulse distance encoded IR */ |
| 32 | #define IR_TYPE_OTHER 99 | 37 | #define IR_TYPE_OTHER 99 |
| 33 | 38 | ||
| 34 | #define IR_KEYTAB_TYPE u32 | ||
| 35 | #define IR_KEYTAB_SIZE 128 /* enougth for rc5, probably need more some day */ | ||
| 36 | |||
| 37 | struct ir_scancode { | 39 | struct ir_scancode { |
| 38 | u16 scancode; | 40 | u16 scancode; |
| 39 | u32 keycode; | 41 | u32 keycode; |
| @@ -42,11 +44,9 @@ struct ir_scancode { | |||
| 42 | struct ir_scancode_table { | 44 | struct ir_scancode_table { |
| 43 | struct ir_scancode *scan; | 45 | struct ir_scancode *scan; |
| 44 | int size; | 46 | int size; |
| 47 | spinlock_t lock; | ||
| 45 | }; | 48 | }; |
| 46 | 49 | ||
| 47 | #define IR_KEYCODE(tab,code) (((unsigned)code < IR_KEYTAB_SIZE) \ | ||
| 48 | ? tab[code] : KEY_RESERVED) | ||
| 49 | |||
| 50 | #define RC5_START(x) (((x)>>12)&3) | 50 | #define RC5_START(x) (((x)>>12)&3) |
| 51 | #define RC5_TOGGLE(x) (((x)>>11)&1) | 51 | #define RC5_TOGGLE(x) (((x)>>11)&1) |
| 52 | #define RC5_ADDR(x) (((x)>>6)&31) | 52 | #define RC5_ADDR(x) (((x)>>6)&31) |
| @@ -55,11 +55,11 @@ struct ir_scancode_table { | |||
| 55 | struct ir_input_state { | 55 | struct ir_input_state { |
| 56 | /* configuration */ | 56 | /* configuration */ |
| 57 | int ir_type; | 57 | int ir_type; |
| 58 | IR_KEYTAB_TYPE ir_codes[IR_KEYTAB_SIZE]; | 58 | |
| 59 | struct ir_scancode_table keytable; | ||
| 59 | 60 | ||
| 60 | /* key info */ | 61 | /* key info */ |
| 61 | u32 ir_raw; /* raw data */ | 62 | u32 ir_key; /* ir scancode */ |
| 62 | u32 ir_key; /* ir key code */ | ||
| 63 | u32 keycode; /* linux key code */ | 63 | u32 keycode; /* linux key code */ |
| 64 | int keypressed; /* current state */ | 64 | int keypressed; /* current state */ |
| 65 | }; | 65 | }; |
| @@ -102,20 +102,36 @@ struct card_ir { | |||
| 102 | struct tasklet_struct tlet; | 102 | struct tasklet_struct tlet; |
| 103 | }; | 103 | }; |
| 104 | 104 | ||
| 105 | void ir_input_init(struct input_dev *dev, struct ir_input_state *ir, | 105 | /* Routines from ir-functions.c */ |
| 106 | |||
| 107 | int ir_input_init(struct input_dev *dev, struct ir_input_state *ir, | ||
| 106 | int ir_type, struct ir_scancode_table *ir_codes); | 108 | int ir_type, struct ir_scancode_table *ir_codes); |
| 107 | void ir_input_nokey(struct input_dev *dev, struct ir_input_state *ir); | 109 | void ir_input_nokey(struct input_dev *dev, struct ir_input_state *ir); |
| 108 | void ir_input_keydown(struct input_dev *dev, struct ir_input_state *ir, | 110 | void ir_input_keydown(struct input_dev *dev, struct ir_input_state *ir, |
| 109 | u32 ir_key, u32 ir_raw); | 111 | u32 ir_key); |
| 110 | u32 ir_extract_bits(u32 data, u32 mask); | 112 | u32 ir_extract_bits(u32 data, u32 mask); |
| 111 | int ir_dump_samples(u32 *samples, int count); | 113 | int ir_dump_samples(u32 *samples, int count); |
| 112 | int ir_decode_biphase(u32 *samples, int count, int low, int high); | 114 | int ir_decode_biphase(u32 *samples, int count, int low, int high); |
| 113 | int ir_decode_pulsedistance(u32 *samples, int count, int low, int high); | 115 | int ir_decode_pulsedistance(u32 *samples, int count, int low, int high); |
| 116 | u32 ir_rc5_decode(unsigned int code); | ||
| 114 | 117 | ||
| 115 | void ir_rc5_timer_end(unsigned long data); | 118 | void ir_rc5_timer_end(unsigned long data); |
| 116 | void ir_rc5_timer_keyup(unsigned long data); | 119 | void ir_rc5_timer_keyup(unsigned long data); |
| 117 | 120 | ||
| 118 | /* Keymaps to be used by other modules */ | 121 | /* Routines from ir-keytable.c */ |
| 122 | |||
| 123 | u32 ir_g_keycode_from_table(struct input_dev *input_dev, | ||
| 124 | u32 scancode); | ||
| 125 | |||
| 126 | int ir_set_keycode_table(struct input_dev *input_dev, | ||
| 127 | struct ir_scancode_table *rc_tab); | ||
| 128 | |||
| 129 | int ir_roundup_tablesize(int n_elems); | ||
| 130 | int ir_copy_table(struct ir_scancode_table *destin, | ||
| 131 | const struct ir_scancode_table *origin); | ||
| 132 | void ir_input_free(struct input_dev *input_dev); | ||
| 133 | |||
| 134 | /* scancode->keycode map tables from ir-keymaps.c */ | ||
| 119 | 135 | ||
| 120 | extern struct ir_scancode_table ir_codes_empty_table; | 136 | extern struct ir_scancode_table ir_codes_empty_table; |
| 121 | extern struct ir_scancode_table ir_codes_avermedia_table; | 137 | extern struct ir_scancode_table ir_codes_avermedia_table; |
| @@ -150,6 +166,7 @@ extern struct ir_scancode_table ir_codes_rc5_tv_table; | |||
| 150 | extern struct ir_scancode_table ir_codes_winfast_table; | 166 | extern struct ir_scancode_table ir_codes_winfast_table; |
| 151 | extern struct ir_scancode_table ir_codes_pinnacle_color_table; | 167 | extern struct ir_scancode_table ir_codes_pinnacle_color_table; |
| 152 | extern struct ir_scancode_table ir_codes_hauppauge_new_table; | 168 | extern struct ir_scancode_table ir_codes_hauppauge_new_table; |
| 169 | extern struct ir_scancode_table ir_codes_rc5_hauppauge_new_table; | ||
| 153 | extern struct ir_scancode_table ir_codes_npgtech_table; | 170 | extern struct ir_scancode_table ir_codes_npgtech_table; |
| 154 | extern struct ir_scancode_table ir_codes_norwood_table; | 171 | extern struct ir_scancode_table ir_codes_norwood_table; |
| 155 | extern struct ir_scancode_table ir_codes_proteus_2309_table; | 172 | extern struct ir_scancode_table ir_codes_proteus_2309_table; |
| @@ -172,6 +189,8 @@ extern struct ir_scancode_table ir_codes_ati_tv_wonder_hd_600_table; | |||
| 172 | extern struct ir_scancode_table ir_codes_kworld_plus_tv_analog_table; | 189 | extern struct ir_scancode_table ir_codes_kworld_plus_tv_analog_table; |
| 173 | extern struct ir_scancode_table ir_codes_kaiomy_table; | 190 | extern struct ir_scancode_table ir_codes_kaiomy_table; |
| 174 | extern struct ir_scancode_table ir_codes_dm1105_nec_table; | 191 | extern struct ir_scancode_table ir_codes_dm1105_nec_table; |
| 192 | extern struct ir_scancode_table ir_codes_tevii_nec_table; | ||
| 193 | extern struct ir_scancode_table ir_codes_tbs_nec_table; | ||
| 175 | extern struct ir_scancode_table ir_codes_evga_indtube_table; | 194 | extern struct ir_scancode_table ir_codes_evga_indtube_table; |
| 176 | extern struct ir_scancode_table ir_codes_terratec_cinergy_xs_table; | 195 | extern struct ir_scancode_table ir_codes_terratec_cinergy_xs_table; |
| 177 | extern struct ir_scancode_table ir_codes_videomate_s350_table; | 196 | extern struct ir_scancode_table ir_codes_videomate_s350_table; |
diff --git a/include/media/v4l2-chip-ident.h b/include/media/v4l2-chip-ident.h index cf16689adba7..91942dbe64e3 100644 --- a/include/media/v4l2-chip-ident.h +++ b/include/media/v4l2-chip-ident.h | |||
| @@ -64,6 +64,7 @@ enum { | |||
| 64 | V4L2_IDENT_OV9650 = 254, | 64 | V4L2_IDENT_OV9650 = 254, |
| 65 | V4L2_IDENT_OV9655 = 255, | 65 | V4L2_IDENT_OV9655 = 255, |
| 66 | V4L2_IDENT_SOI968 = 256, | 66 | V4L2_IDENT_SOI968 = 256, |
| 67 | V4L2_IDENT_OV9640 = 257, | ||
| 67 | 68 | ||
| 68 | /* module saa7146: reserved range 300-309 */ | 69 | /* module saa7146: reserved range 300-309 */ |
| 69 | V4L2_IDENT_SAA7146 = 300, | 70 | V4L2_IDENT_SAA7146 = 300, |
| @@ -72,6 +73,7 @@ enum { | |||
| 72 | V4L2_IDENT_CX23418_843 = 403, /* Integrated A/V Decoder on the '418 */ | 73 | V4L2_IDENT_CX23418_843 = 403, /* Integrated A/V Decoder on the '418 */ |
| 73 | V4L2_IDENT_CX23415 = 415, | 74 | V4L2_IDENT_CX23415 = 415, |
| 74 | V4L2_IDENT_CX23416 = 416, | 75 | V4L2_IDENT_CX23416 = 416, |
| 76 | V4L2_IDENT_CX23417 = 417, | ||
| 75 | V4L2_IDENT_CX23418 = 418, | 77 | V4L2_IDENT_CX23418 = 418, |
| 76 | 78 | ||
| 77 | /* module au0828 */ | 79 | /* module au0828 */ |
| @@ -129,6 +131,9 @@ enum { | |||
| 129 | V4L2_IDENT_SAA6752HS = 6752, | 131 | V4L2_IDENT_SAA6752HS = 6752, |
| 130 | V4L2_IDENT_SAA6752HS_AC3 = 6753, | 132 | V4L2_IDENT_SAA6752HS_AC3 = 6753, |
| 131 | 133 | ||
| 134 | /* modules tef6862: just ident 6862 */ | ||
| 135 | V4L2_IDENT_TEF6862 = 6862, | ||
| 136 | |||
| 132 | /* module adv7170: just ident 7170 */ | 137 | /* module adv7170: just ident 7170 */ |
| 133 | V4L2_IDENT_ADV7170 = 7170, | 138 | V4L2_IDENT_ADV7170 = 7170, |
| 134 | 139 | ||
| @@ -165,12 +170,27 @@ enum { | |||
| 165 | /* module mt9v011, just ident 8243 */ | 170 | /* module mt9v011, just ident 8243 */ |
| 166 | V4L2_IDENT_MT9V011 = 8243, | 171 | V4L2_IDENT_MT9V011 = 8243, |
| 167 | 172 | ||
| 173 | /* module cx23885 and cx25840 */ | ||
| 174 | V4L2_IDENT_CX23885 = 8850, | ||
| 175 | V4L2_IDENT_CX23885_AV = 8851, /* Integrated A/V decoder */ | ||
| 176 | V4L2_IDENT_CX23887 = 8870, | ||
| 177 | V4L2_IDENT_CX23887_AV = 8871, /* Integrated A/V decoder */ | ||
| 178 | V4L2_IDENT_CX23888 = 8880, | ||
| 179 | V4L2_IDENT_CX23888_AV = 8881, /* Integrated A/V decoder */ | ||
| 180 | V4L2_IDENT_CX23888_IR = 8882, /* Integrated infrared controller */ | ||
| 181 | |||
| 168 | /* module tw9910: just ident 9910 */ | 182 | /* module tw9910: just ident 9910 */ |
| 169 | V4L2_IDENT_TW9910 = 9910, | 183 | V4L2_IDENT_TW9910 = 9910, |
| 170 | 184 | ||
| 171 | /* module sn9c20x: just ident 10000 */ | 185 | /* module sn9c20x: just ident 10000 */ |
| 172 | V4L2_IDENT_SN9C20X = 10000, | 186 | V4L2_IDENT_SN9C20X = 10000, |
| 173 | 187 | ||
| 188 | /* module cx231xx and cx25840 */ | ||
| 189 | V4L2_IDENT_CX2310X_AV = 23099, /* Integrated A/V decoder; not in '100 */ | ||
| 190 | V4L2_IDENT_CX23100 = 23100, | ||
| 191 | V4L2_IDENT_CX23101 = 23101, | ||
| 192 | V4L2_IDENT_CX23102 = 23102, | ||
| 193 | |||
| 174 | /* module msp3400: reserved range 34000-34999 and 44000-44999 */ | 194 | /* module msp3400: reserved range 34000-34999 and 44000-44999 */ |
| 175 | V4L2_IDENT_MSPX4XX = 34000, /* generic MSPX4XX identifier, only | 195 | V4L2_IDENT_MSPX4XX = 34000, /* generic MSPX4XX identifier, only |
| 176 | use internally (tveeprom.c). */ | 196 | use internally (tveeprom.c). */ |
| @@ -264,6 +284,9 @@ enum { | |||
| 264 | 284 | ||
| 265 | /* module m52790: just ident 52790 */ | 285 | /* module m52790: just ident 52790 */ |
| 266 | V4L2_IDENT_M52790 = 52790, | 286 | V4L2_IDENT_M52790 = 52790, |
| 287 | |||
| 288 | /* Sharp RJ54N1CB0C, 0xCB0C = 51980 */ | ||
| 289 | V4L2_IDENT_RJ54N1CB0C = 51980, | ||
| 267 | }; | 290 | }; |
| 268 | 291 | ||
| 269 | #endif | 292 | #endif |
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h index d411345f244b..00bf17608453 100644 --- a/include/media/v4l2-subdev.h +++ b/include/media/v4l2-subdev.h | |||
| @@ -23,6 +23,16 @@ | |||
| 23 | 23 | ||
| 24 | #include <media/v4l2-common.h> | 24 | #include <media/v4l2-common.h> |
| 25 | 25 | ||
| 26 | /* generic v4l2_device notify callback notification values */ | ||
| 27 | #define V4L2_SUBDEV_IR_RX_NOTIFY _IOW('v', 0, u32) | ||
| 28 | #define V4L2_SUBDEV_IR_RX_FIFO_SERVICE_REQ 0x00000001 | ||
| 29 | #define V4L2_SUBDEV_IR_RX_END_OF_RX_DETECTED 0x00000002 | ||
| 30 | #define V4L2_SUBDEV_IR_RX_HW_FIFO_OVERRUN 0x00000004 | ||
| 31 | #define V4L2_SUBDEV_IR_RX_SW_FIFO_OVERRUN 0x00000008 | ||
| 32 | |||
| 33 | #define V4L2_SUBDEV_IR_TX_NOTIFY _IOW('v', 1, u32) | ||
| 34 | #define V4L2_SUBDEV_IR_TX_FIFO_SERVICE_REQ 0x00000001 | ||
| 35 | |||
| 26 | struct v4l2_device; | 36 | struct v4l2_device; |
| 27 | struct v4l2_subdev; | 37 | struct v4l2_subdev; |
| 28 | struct tuner_setup; | 38 | struct tuner_setup; |
| @@ -96,6 +106,9 @@ struct v4l2_decode_vbi_line { | |||
| 96 | 106 | ||
| 97 | s_gpio: set GPIO pins. Very simple right now, might need to be extended with | 107 | s_gpio: set GPIO pins. Very simple right now, might need to be extended with |
| 98 | a direction argument if needed. | 108 | a direction argument if needed. |
| 109 | |||
| 110 | s_power: puts subdevice in power saving mode (on == 0) or normal operation | ||
| 111 | mode (on == 1). | ||
| 99 | */ | 112 | */ |
| 100 | struct v4l2_subdev_core_ops { | 113 | struct v4l2_subdev_core_ops { |
| 101 | int (*g_chip_ident)(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip); | 114 | int (*g_chip_ident)(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip); |
| @@ -118,6 +131,7 @@ struct v4l2_subdev_core_ops { | |||
| 118 | int (*g_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg); | 131 | int (*g_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg); |
| 119 | int (*s_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg); | 132 | int (*s_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg); |
| 120 | #endif | 133 | #endif |
| 134 | int (*s_power)(struct v4l2_subdev *sd, int on); | ||
| 121 | }; | 135 | }; |
| 122 | 136 | ||
| 123 | /* s_mode: switch the tuner to a specific tuner mode. Replacement of s_radio. | 137 | /* s_mode: switch the tuner to a specific tuner mode. Replacement of s_radio. |
| @@ -127,8 +141,6 @@ struct v4l2_subdev_core_ops { | |||
| 127 | s_type_addr: sets tuner type and its I2C addr. | 141 | s_type_addr: sets tuner type and its I2C addr. |
| 128 | 142 | ||
| 129 | s_config: sets tda9887 specific stuff, like port1, port2 and qss | 143 | s_config: sets tda9887 specific stuff, like port1, port2 and qss |
| 130 | |||
| 131 | s_standby: puts tuner on powersaving state, disabling it, except for i2c. | ||
| 132 | */ | 144 | */ |
| 133 | struct v4l2_subdev_tuner_ops { | 145 | struct v4l2_subdev_tuner_ops { |
| 134 | int (*s_mode)(struct v4l2_subdev *sd, enum v4l2_tuner_type); | 146 | int (*s_mode)(struct v4l2_subdev *sd, enum v4l2_tuner_type); |
| @@ -141,7 +153,6 @@ struct v4l2_subdev_tuner_ops { | |||
| 141 | int (*s_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm); | 153 | int (*s_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm); |
| 142 | int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type); | 154 | int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type); |
| 143 | int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config); | 155 | int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config); |
| 144 | int (*s_standby)(struct v4l2_subdev *sd); | ||
| 145 | }; | 156 | }; |
| 146 | 157 | ||
| 147 | /* s_clock_freq: set the frequency (in Hz) of the audio clock output. | 158 | /* s_clock_freq: set the frequency (in Hz) of the audio clock output. |
| @@ -231,11 +242,95 @@ struct v4l2_subdev_video_ops { | |||
| 231 | int (*enum_frameintervals)(struct v4l2_subdev *sd, struct v4l2_frmivalenum *fival); | 242 | int (*enum_frameintervals)(struct v4l2_subdev *sd, struct v4l2_frmivalenum *fival); |
| 232 | }; | 243 | }; |
| 233 | 244 | ||
| 245 | /* | ||
| 246 | interrupt_service_routine: Called by the bridge chip's interrupt service | ||
| 247 | handler, when an IR interrupt status has be raised due to this subdev, | ||
| 248 | so that this subdev can handle the details. It may schedule work to be | ||
| 249 | performed later. It must not sleep. *Called from an IRQ context*. | ||
| 250 | |||
| 251 | [rt]x_g_parameters: Get the current operating parameters and state of the | ||
| 252 | the IR receiver or transmitter. | ||
| 253 | |||
| 254 | [rt]x_s_parameters: Set the current operating parameters and state of the | ||
| 255 | the IR receiver or transmitter. It is recommended to call | ||
| 256 | [rt]x_g_parameters first to fill out the current state, and only change | ||
| 257 | the fields that need to be changed. Upon return, the actual device | ||
| 258 | operating parameters and state will be returned. Note that hardware | ||
| 259 | limitations may prevent the actual settings from matching the requested | ||
| 260 | settings - e.g. an actual carrier setting of 35,904 Hz when 36,000 Hz | ||
| 261 | was requested. An exception is when the shutdown parameter is true. | ||
| 262 | The last used operational parameters will be returned, but the actual | ||
| 263 | state of the hardware be different to minimize power consumption and | ||
| 264 | processing when shutdown is true. | ||
| 265 | |||
| 266 | rx_read: Reads received codes or pulse width data. | ||
| 267 | The semantics are similar to a non-blocking read() call. | ||
| 268 | |||
| 269 | tx_write: Writes codes or pulse width data for transmission. | ||
| 270 | The semantics are similar to a non-blocking write() call. | ||
| 271 | */ | ||
| 272 | |||
| 273 | enum v4l2_subdev_ir_mode { | ||
| 274 | V4L2_SUBDEV_IR_MODE_PULSE_WIDTH, /* space & mark widths in nanosecs */ | ||
| 275 | }; | ||
| 276 | |||
| 277 | /* Data format of data read or written for V4L2_SUBDEV_IR_MODE_PULSE_WIDTH */ | ||
| 278 | #define V4L2_SUBDEV_IR_PULSE_MAX_WIDTH_NS 0x7fffffff | ||
| 279 | #define V4L2_SUBDEV_IR_PULSE_LEVEL_MASK 0x80000000 | ||
| 280 | #define V4L2_SUBDEV_IR_PULSE_RX_SEQ_END 0xffffffff | ||
| 281 | |||
| 282 | struct v4l2_subdev_ir_parameters { | ||
| 283 | /* Either Rx or Tx */ | ||
| 284 | unsigned int bytes_per_data_element; /* of data in read or write call */ | ||
| 285 | enum v4l2_subdev_ir_mode mode; | ||
| 286 | |||
| 287 | bool enable; | ||
| 288 | bool interrupt_enable; | ||
| 289 | bool shutdown; /* true: set hardware to low/no power, false: normal */ | ||
| 290 | |||
| 291 | bool modulation; /* true: uses carrier, false: baseband */ | ||
| 292 | u32 max_pulse_width; /* ns, valid only for baseband signal */ | ||
| 293 | unsigned int carrier_freq; /* Hz, valid only for modulated signal*/ | ||
| 294 | unsigned int duty_cycle; /* percent, valid only for modulated signal*/ | ||
| 295 | bool invert; /* logically invert sense of mark/space */ | ||
| 296 | |||
| 297 | /* Rx only */ | ||
| 298 | u32 noise_filter_min_width; /* ns, min time of a valid pulse */ | ||
| 299 | unsigned int carrier_range_lower; /* Hz, valid only for modulated sig */ | ||
| 300 | unsigned int carrier_range_upper; /* Hz, valid only for modulated sig */ | ||
| 301 | u32 resolution; /* ns */ | ||
| 302 | }; | ||
| 303 | |||
| 304 | struct v4l2_subdev_ir_ops { | ||
| 305 | /* Common to receiver and transmitter */ | ||
| 306 | int (*interrupt_service_routine)(struct v4l2_subdev *sd, | ||
| 307 | u32 status, bool *handled); | ||
| 308 | |||
| 309 | /* Receiver */ | ||
| 310 | int (*rx_read)(struct v4l2_subdev *sd, u8 *buf, size_t count, | ||
| 311 | ssize_t *num); | ||
| 312 | |||
| 313 | int (*rx_g_parameters)(struct v4l2_subdev *sd, | ||
| 314 | struct v4l2_subdev_ir_parameters *params); | ||
| 315 | int (*rx_s_parameters)(struct v4l2_subdev *sd, | ||
| 316 | struct v4l2_subdev_ir_parameters *params); | ||
| 317 | |||
| 318 | /* Transmitter */ | ||
| 319 | int (*tx_write)(struct v4l2_subdev *sd, u8 *buf, size_t count, | ||
| 320 | ssize_t *num); | ||
| 321 | |||
| 322 | int (*tx_g_parameters)(struct v4l2_subdev *sd, | ||
| 323 | struct v4l2_subdev_ir_parameters *params); | ||
| 324 | int (*tx_s_parameters)(struct v4l2_subdev *sd, | ||
| 325 | struct v4l2_subdev_ir_parameters *params); | ||
| 326 | }; | ||
| 327 | |||
| 234 | struct v4l2_subdev_ops { | 328 | struct v4l2_subdev_ops { |
| 235 | const struct v4l2_subdev_core_ops *core; | 329 | const struct v4l2_subdev_core_ops *core; |
| 236 | const struct v4l2_subdev_tuner_ops *tuner; | 330 | const struct v4l2_subdev_tuner_ops *tuner; |
| 237 | const struct v4l2_subdev_audio_ops *audio; | 331 | const struct v4l2_subdev_audio_ops *audio; |
| 238 | const struct v4l2_subdev_video_ops *video; | 332 | const struct v4l2_subdev_video_ops *video; |
| 333 | const struct v4l2_subdev_ir_ops *ir; | ||
| 239 | }; | 334 | }; |
| 240 | 335 | ||
| 241 | #define V4L2_SUBDEV_NAME_SIZE 32 | 336 | #define V4L2_SUBDEV_NAME_SIZE 32 |
| @@ -290,7 +385,7 @@ static inline void v4l2_subdev_init(struct v4l2_subdev *sd, | |||
| 290 | Example: err = v4l2_subdev_call(sd, core, g_chip_ident, &chip); | 385 | Example: err = v4l2_subdev_call(sd, core, g_chip_ident, &chip); |
| 291 | */ | 386 | */ |
| 292 | #define v4l2_subdev_call(sd, o, f, args...) \ | 387 | #define v4l2_subdev_call(sd, o, f, args...) \ |
| 293 | (!(sd) ? -ENODEV : (((sd) && (sd)->ops->o && (sd)->ops->o->f) ? \ | 388 | (!(sd) ? -ENODEV : (((sd)->ops->o && (sd)->ops->o->f) ? \ |
| 294 | (sd)->ops->o->f((sd) , ##args) : -ENOIOCTLCMD)) | 389 | (sd)->ops->o->f((sd) , ##args) : -ENOIOCTLCMD)) |
| 295 | 390 | ||
| 296 | /* Send a notification to v4l2_device. */ | 391 | /* Send a notification to v4l2_device. */ |
diff --git a/include/media/videobuf-core.h b/include/media/videobuf-core.h index 1c5946c44758..316fdccdcaa0 100644 --- a/include/media/videobuf-core.h +++ b/include/media/videobuf-core.h | |||
| @@ -166,7 +166,7 @@ struct videobuf_queue { | |||
| 166 | enum v4l2_field field; | 166 | enum v4l2_field field; |
| 167 | enum v4l2_field last; /* for field=V4L2_FIELD_ALTERNATE */ | 167 | enum v4l2_field last; /* for field=V4L2_FIELD_ALTERNATE */ |
| 168 | struct videobuf_buffer *bufs[VIDEO_MAX_FRAME]; | 168 | struct videobuf_buffer *bufs[VIDEO_MAX_FRAME]; |
| 169 | struct videobuf_queue_ops *ops; | 169 | const struct videobuf_queue_ops *ops; |
| 170 | struct videobuf_qtype_ops *int_ops; | 170 | struct videobuf_qtype_ops *int_ops; |
| 171 | 171 | ||
| 172 | unsigned int streaming:1; | 172 | unsigned int streaming:1; |
| @@ -195,7 +195,7 @@ void *videobuf_queue_to_vmalloc (struct videobuf_queue* q, | |||
| 195 | struct videobuf_buffer *buf); | 195 | struct videobuf_buffer *buf); |
| 196 | 196 | ||
| 197 | void videobuf_queue_core_init(struct videobuf_queue *q, | 197 | void videobuf_queue_core_init(struct videobuf_queue *q, |
| 198 | struct videobuf_queue_ops *ops, | 198 | const struct videobuf_queue_ops *ops, |
| 199 | struct device *dev, | 199 | struct device *dev, |
| 200 | spinlock_t *irqlock, | 200 | spinlock_t *irqlock, |
| 201 | enum v4l2_buf_type type, | 201 | enum v4l2_buf_type type, |
diff --git a/include/media/videobuf-dma-contig.h b/include/media/videobuf-dma-contig.h index 549386681aab..ebaa9bc1ee8d 100644 --- a/include/media/videobuf-dma-contig.h +++ b/include/media/videobuf-dma-contig.h | |||
| @@ -17,7 +17,7 @@ | |||
| 17 | #include <media/videobuf-core.h> | 17 | #include <media/videobuf-core.h> |
| 18 | 18 | ||
| 19 | void videobuf_queue_dma_contig_init(struct videobuf_queue *q, | 19 | void videobuf_queue_dma_contig_init(struct videobuf_queue *q, |
| 20 | struct videobuf_queue_ops *ops, | 20 | const struct videobuf_queue_ops *ops, |
| 21 | struct device *dev, | 21 | struct device *dev, |
| 22 | spinlock_t *irqlock, | 22 | spinlock_t *irqlock, |
| 23 | enum v4l2_buf_type type, | 23 | enum v4l2_buf_type type, |
diff --git a/include/media/videobuf-dma-sg.h b/include/media/videobuf-dma-sg.h index dda47f0082e9..53e72f787175 100644 --- a/include/media/videobuf-dma-sg.h +++ b/include/media/videobuf-dma-sg.h | |||
| @@ -103,7 +103,7 @@ struct videobuf_dmabuf *videobuf_to_dma (struct videobuf_buffer *buf); | |||
| 103 | void *videobuf_sg_alloc(size_t size); | 103 | void *videobuf_sg_alloc(size_t size); |
| 104 | 104 | ||
| 105 | void videobuf_queue_sg_init(struct videobuf_queue* q, | 105 | void videobuf_queue_sg_init(struct videobuf_queue* q, |
| 106 | struct videobuf_queue_ops *ops, | 106 | const struct videobuf_queue_ops *ops, |
| 107 | struct device *dev, | 107 | struct device *dev, |
| 108 | spinlock_t *irqlock, | 108 | spinlock_t *irqlock, |
| 109 | enum v4l2_buf_type type, | 109 | enum v4l2_buf_type type, |
diff --git a/include/media/videobuf-dvb.h b/include/media/videobuf-dvb.h index 6ba4f1271d23..07cf4b9d0a65 100644 --- a/include/media/videobuf-dvb.h +++ b/include/media/videobuf-dvb.h | |||
| @@ -42,7 +42,9 @@ int videobuf_dvb_register_bus(struct videobuf_dvb_frontends *f, | |||
| 42 | void *adapter_priv, | 42 | void *adapter_priv, |
| 43 | struct device *device, | 43 | struct device *device, |
| 44 | short *adapter_nr, | 44 | short *adapter_nr, |
| 45 | int mfe_shared); | 45 | int mfe_shared, |
| 46 | int (*fe_ioctl_override)(struct dvb_frontend *, | ||
| 47 | unsigned int, void *, unsigned int)); | ||
| 46 | 48 | ||
| 47 | void videobuf_dvb_unregister_bus(struct videobuf_dvb_frontends *f); | 49 | void videobuf_dvb_unregister_bus(struct videobuf_dvb_frontends *f); |
| 48 | 50 | ||
diff --git a/include/media/videobuf-vmalloc.h b/include/media/videobuf-vmalloc.h index e87222c6a125..4b419a257a7d 100644 --- a/include/media/videobuf-vmalloc.h +++ b/include/media/videobuf-vmalloc.h | |||
| @@ -30,8 +30,8 @@ struct videobuf_vmalloc_memory | |||
| 30 | }; | 30 | }; |
| 31 | 31 | ||
| 32 | void videobuf_queue_vmalloc_init(struct videobuf_queue* q, | 32 | void videobuf_queue_vmalloc_init(struct videobuf_queue* q, |
| 33 | struct videobuf_queue_ops *ops, | 33 | const struct videobuf_queue_ops *ops, |
| 34 | void *dev, | 34 | struct device *dev, |
| 35 | spinlock_t *irqlock, | 35 | spinlock_t *irqlock, |
| 36 | enum v4l2_buf_type type, | 36 | enum v4l2_buf_type type, |
| 37 | enum v4l2_field field, | 37 | enum v4l2_field field, |
