diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-20 12:37:45 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-20 12:37:45 -0400 |
| commit | fb091be08d1acf184e8801dfdcace6e0cb19b1fe (patch) | |
| tree | cbd0c4200fd8628d592167589ca790e36fc4ae26 /include/media | |
| parent | bd7fc2f2d807fdb254f7efc542f8eec3f23e289e (diff) | |
| parent | e8d0416796d43a950ec7b65629e53419b2e22453 (diff) | |
Merge branch 'v4l_for_2.6.35' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6
* 'v4l_for_2.6.35' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6: (534 commits)
V4L/DVB (13554a): v4l: Use the video_drvdata function in drivers
V4L/DVB: vivi and mem2mem_testdev need slab.h to build
V4L/DVB: tm6000: bugfix image position
V4L/DVB: IR/imon: remove dead IMON_KEY_RELEASE_OFFSET
V4L/DVB: tm6000: README - add vbi
V4L/DVB: Fix unlock logic at medusa_video_init
V4L/DVB: fix dvb frontend lockup
V4L/DVB: s2255drv: remove dead code
V4L/DVB: s2255drv: return if vdev not found
V4L/DVB: ov511: cleanup: remove unneeded null check
V4L/DVB: media/mem2mem: dereferencing free memory
V4L/DVB: media/IR: Add missing include file to rc-map.c
V4L/DVB: dvb/stv6110x: cleanup error handling
V4L/DVB: ngene: Add lgdt3303 and mt2131 deps to Kconfig
V4L/DVB: ngene: start separating out DVB functions into separate file
V4L/DVB: ngene: split out card specific code into a separate file
V4L/DVB: ngene: split out i2c code into a separate file
V4L/DVB: ngene: add initial support for digital side of Avermedia m780
V4L/DVB: ngene: properly support boards where channel 0 isn't a TS input
V4L-DVB: ngene: make sure that tuner headers are included
...
Diffstat (limited to 'include/media')
| -rw-r--r-- | include/media/ak881x.h | 25 | ||||
| -rw-r--r-- | include/media/davinci/vpfe_capture.h | 2 | ||||
| -rw-r--r-- | include/media/ir-common.h | 74 | ||||
| -rw-r--r-- | include/media/ir-core.h | 142 | ||||
| -rw-r--r-- | include/media/ir-kbd-i2c.h | 6 | ||||
| -rw-r--r-- | include/media/rc-map.h | 121 | ||||
| -rw-r--r-- | include/media/sh_vou.h | 34 | ||||
| -rw-r--r-- | include/media/soc_camera.h | 12 | ||||
| -rw-r--r-- | include/media/v4l2-chip-ident.h | 127 | ||||
| -rw-r--r-- | include/media/v4l2-common.h | 27 | ||||
| -rw-r--r-- | include/media/v4l2-dev.h | 5 | ||||
| -rw-r--r-- | include/media/v4l2-event.h | 67 | ||||
| -rw-r--r-- | include/media/v4l2-fh.h | 65 | ||||
| -rw-r--r-- | include/media/v4l2-ioctl.h | 7 | ||||
| -rw-r--r-- | include/media/v4l2-mem2mem.h | 201 | ||||
| -rw-r--r-- | include/media/v4l2-subdev.h | 70 | ||||
| -rw-r--r-- | include/media/videobuf-core.h | 35 | ||||
| -rw-r--r-- | include/media/videobuf-dma-sg.h | 26 | ||||
| -rw-r--r-- | include/media/videobuf-vmalloc.h | 12 |
19 files changed, 822 insertions, 236 deletions
diff --git a/include/media/ak881x.h b/include/media/ak881x.h new file mode 100644 index 000000000000..b7f2add5ce7b --- /dev/null +++ b/include/media/ak881x.h | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | /* | ||
| 2 | * Header for AK8813 / AK8814 TV-ecoders from Asahi Kasei Microsystems Co., Ltd. (AKM) | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010, Guennadi Liakhovetski <g.liakhovetski@gmx.de> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #ifndef AK881X_H | ||
| 12 | #define AK881X_H | ||
| 13 | |||
| 14 | #define AK881X_IF_MODE_MASK (3 << 0) | ||
| 15 | #define AK881X_IF_MODE_BT656 (0 << 0) | ||
| 16 | #define AK881X_IF_MODE_MASTER (1 << 0) | ||
| 17 | #define AK881X_IF_MODE_SLAVE (2 << 0) | ||
| 18 | #define AK881X_FIELD (1 << 2) | ||
| 19 | #define AK881X_COMPONENT (1 << 3) | ||
| 20 | |||
| 21 | struct ak881x_pdata { | ||
| 22 | unsigned long flags; | ||
| 23 | }; | ||
| 24 | |||
| 25 | #endif | ||
diff --git a/include/media/davinci/vpfe_capture.h b/include/media/davinci/vpfe_capture.h index 4314a5f6a087..cc973ed845a7 100644 --- a/include/media/davinci/vpfe_capture.h +++ b/include/media/davinci/vpfe_capture.h | |||
| @@ -94,6 +94,8 @@ struct vpfe_config { | |||
| 94 | /* vpfe clock */ | 94 | /* vpfe clock */ |
| 95 | struct clk *vpssclk; | 95 | struct clk *vpssclk; |
| 96 | struct clk *slaveclk; | 96 | struct clk *slaveclk; |
| 97 | /* Function for Clearing the interrupt */ | ||
| 98 | void (*clr_intr)(int vdint); | ||
| 97 | }; | 99 | }; |
| 98 | 100 | ||
| 99 | struct vpfe_device { | 101 | struct vpfe_device { |
diff --git a/include/media/ir-common.h b/include/media/ir-common.h index c66298062d39..528050e39ad9 100644 --- a/include/media/ir-common.h +++ b/include/media/ir-common.h | |||
| @@ -50,6 +50,10 @@ struct card_ir { | |||
| 50 | struct ir_input_state ir; | 50 | struct ir_input_state ir; |
| 51 | char name[32]; | 51 | char name[32]; |
| 52 | char phys[32]; | 52 | char phys[32]; |
| 53 | int users; | ||
| 54 | |||
| 55 | u32 running:1; | ||
| 56 | struct ir_dev_props props; | ||
| 53 | 57 | ||
| 54 | /* Usual gpio signalling */ | 58 | /* Usual gpio signalling */ |
| 55 | 59 | ||
| @@ -79,6 +83,9 @@ struct card_ir { | |||
| 79 | /* NEC decoding */ | 83 | /* NEC decoding */ |
| 80 | u32 nec_gpio; | 84 | u32 nec_gpio; |
| 81 | struct tasklet_struct tlet; | 85 | struct tasklet_struct tlet; |
| 86 | |||
| 87 | /* IR core raw decoding */ | ||
| 88 | u32 raw_decode; | ||
| 82 | }; | 89 | }; |
| 83 | 90 | ||
| 84 | /* Routines from ir-functions.c */ | 91 | /* Routines from ir-functions.c */ |
| @@ -97,71 +104,4 @@ u32 ir_rc5_decode(unsigned int code); | |||
| 97 | void ir_rc5_timer_end(unsigned long data); | 104 | void ir_rc5_timer_end(unsigned long data); |
| 98 | void ir_rc5_timer_keyup(unsigned long data); | 105 | void ir_rc5_timer_keyup(unsigned long data); |
| 99 | 106 | ||
| 100 | /* scancode->keycode map tables from ir-keymaps.c */ | ||
| 101 | |||
| 102 | extern struct ir_scancode_table ir_codes_empty_table; | ||
| 103 | extern struct ir_scancode_table ir_codes_avermedia_table; | ||
| 104 | extern struct ir_scancode_table ir_codes_avermedia_dvbt_table; | ||
| 105 | extern struct ir_scancode_table ir_codes_avermedia_m135a_table; | ||
| 106 | extern struct ir_scancode_table ir_codes_avermedia_cardbus_table; | ||
| 107 | extern struct ir_scancode_table ir_codes_apac_viewcomp_table; | ||
| 108 | extern struct ir_scancode_table ir_codes_pixelview_table; | ||
| 109 | extern struct ir_scancode_table ir_codes_pixelview_new_table; | ||
| 110 | extern struct ir_scancode_table ir_codes_nebula_table; | ||
| 111 | extern struct ir_scancode_table ir_codes_dntv_live_dvb_t_table; | ||
| 112 | extern struct ir_scancode_table ir_codes_iodata_bctv7e_table; | ||
| 113 | extern struct ir_scancode_table ir_codes_adstech_dvb_t_pci_table; | ||
| 114 | extern struct ir_scancode_table ir_codes_msi_tvanywhere_table; | ||
| 115 | extern struct ir_scancode_table ir_codes_cinergy_1400_table; | ||
| 116 | extern struct ir_scancode_table ir_codes_avertv_303_table; | ||
| 117 | extern struct ir_scancode_table ir_codes_dntv_live_dvbt_pro_table; | ||
| 118 | extern struct ir_scancode_table ir_codes_em_terratec_table; | ||
| 119 | extern struct ir_scancode_table ir_codes_pinnacle_grey_table; | ||
| 120 | extern struct ir_scancode_table ir_codes_flyvideo_table; | ||
| 121 | extern struct ir_scancode_table ir_codes_flydvb_table; | ||
| 122 | extern struct ir_scancode_table ir_codes_cinergy_table; | ||
| 123 | extern struct ir_scancode_table ir_codes_eztv_table; | ||
| 124 | extern struct ir_scancode_table ir_codes_avermedia_table; | ||
| 125 | extern struct ir_scancode_table ir_codes_videomate_tv_pvr_table; | ||
| 126 | extern struct ir_scancode_table ir_codes_manli_table; | ||
| 127 | extern struct ir_scancode_table ir_codes_gotview7135_table; | ||
| 128 | extern struct ir_scancode_table ir_codes_purpletv_table; | ||
| 129 | extern struct ir_scancode_table ir_codes_pctv_sedna_table; | ||
| 130 | extern struct ir_scancode_table ir_codes_pv951_table; | ||
| 131 | extern struct ir_scancode_table ir_codes_rc5_tv_table; | ||
| 132 | extern struct ir_scancode_table ir_codes_winfast_table; | ||
| 133 | extern struct ir_scancode_table ir_codes_pinnacle_color_table; | ||
| 134 | extern struct ir_scancode_table ir_codes_hauppauge_new_table; | ||
| 135 | extern struct ir_scancode_table ir_codes_rc5_hauppauge_new_table; | ||
| 136 | extern struct ir_scancode_table ir_codes_npgtech_table; | ||
| 137 | extern struct ir_scancode_table ir_codes_norwood_table; | ||
| 138 | extern struct ir_scancode_table ir_codes_proteus_2309_table; | ||
| 139 | extern struct ir_scancode_table ir_codes_budget_ci_old_table; | ||
| 140 | extern struct ir_scancode_table ir_codes_asus_pc39_table; | ||
| 141 | extern struct ir_scancode_table ir_codes_encore_enltv_table; | ||
| 142 | extern struct ir_scancode_table ir_codes_encore_enltv2_table; | ||
| 143 | extern struct ir_scancode_table ir_codes_tt_1500_table; | ||
| 144 | extern struct ir_scancode_table ir_codes_fusionhdtv_mce_table; | ||
| 145 | extern struct ir_scancode_table ir_codes_behold_table; | ||
| 146 | extern struct ir_scancode_table ir_codes_behold_columbus_table; | ||
| 147 | extern struct ir_scancode_table ir_codes_pinnacle_pctv_hd_table; | ||
| 148 | extern struct ir_scancode_table ir_codes_genius_tvgo_a11mce_table; | ||
| 149 | extern struct ir_scancode_table ir_codes_powercolor_real_angel_table; | ||
| 150 | extern struct ir_scancode_table ir_codes_avermedia_a16d_table; | ||
| 151 | extern struct ir_scancode_table ir_codes_encore_enltv_fm53_table; | ||
| 152 | extern struct ir_scancode_table ir_codes_real_audio_220_32_keys_table; | ||
| 153 | extern struct ir_scancode_table ir_codes_msi_tvanywhere_plus_table; | ||
| 154 | extern struct ir_scancode_table ir_codes_ati_tv_wonder_hd_600_table; | ||
| 155 | extern struct ir_scancode_table ir_codes_kworld_plus_tv_analog_table; | ||
| 156 | extern struct ir_scancode_table ir_codes_kaiomy_table; | ||
| 157 | extern struct ir_scancode_table ir_codes_dm1105_nec_table; | ||
| 158 | extern struct ir_scancode_table ir_codes_tevii_nec_table; | ||
| 159 | extern struct ir_scancode_table ir_codes_tbs_nec_table; | ||
| 160 | extern struct ir_scancode_table ir_codes_evga_indtube_table; | ||
| 161 | extern struct ir_scancode_table ir_codes_terratec_cinergy_xs_table; | ||
| 162 | extern struct ir_scancode_table ir_codes_videomate_s350_table; | ||
| 163 | extern struct ir_scancode_table ir_codes_gadmei_rm008z_table; | ||
| 164 | extern struct ir_scancode_table ir_codes_nec_terratec_cinergy_xs_table; | ||
| 165 | extern struct ir_scancode_table ir_codes_winfast_usbii_deluxe_table; | ||
| 166 | extern struct ir_scancode_table ir_codes_kworld_315u_table; | ||
| 167 | #endif | 107 | #endif |
diff --git a/include/media/ir-core.h b/include/media/ir-core.h index 61c223bc3953..ad1303f20e00 100644 --- a/include/media/ir-core.h +++ b/include/media/ir-core.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Remote Controller core header | 2 | * Remote Controller core header |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2009-2010 by Mauro Carvalho Chehab <mchehab@redhat.com> | ||
| 5 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
| 5 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
| 6 | * the Free Software Foundation version 2 of the License. | 8 | * the Free Software Foundation version 2 of the License. |
| @@ -14,61 +16,133 @@ | |||
| 14 | #ifndef _IR_CORE | 16 | #ifndef _IR_CORE |
| 15 | #define _IR_CORE | 17 | #define _IR_CORE |
| 16 | 18 | ||
| 17 | #include <linux/input.h> | ||
| 18 | #include <linux/spinlock.h> | 19 | #include <linux/spinlock.h> |
| 20 | #include <linux/kfifo.h> | ||
| 21 | #include <linux/time.h> | ||
| 22 | #include <linux/timer.h> | ||
| 23 | #include <media/rc-map.h> | ||
| 19 | 24 | ||
| 20 | extern int ir_core_debug; | 25 | extern int ir_core_debug; |
| 21 | #define IR_dprintk(level, fmt, arg...) if (ir_core_debug >= level) \ | 26 | #define IR_dprintk(level, fmt, arg...) if (ir_core_debug >= level) \ |
| 22 | printk(KERN_DEBUG "%s: " fmt , __func__, ## arg) | 27 | printk(KERN_DEBUG "%s: " fmt , __func__, ## arg) |
| 23 | 28 | ||
| 24 | #define IR_TYPE_UNKNOWN 0 | 29 | enum rc_driver_type { |
| 25 | #define IR_TYPE_RC5 (1 << 0) /* Philips RC5 protocol */ | 30 | RC_DRIVER_SCANCODE = 0, /* Driver or hardware generates a scancode */ |
| 26 | #define IR_TYPE_PD (1 << 1) /* Pulse distance encoded IR */ | 31 | RC_DRIVER_IR_RAW, /* Needs a Infra-Red pulse/space decoder */ |
| 27 | #define IR_TYPE_NEC (1 << 2) | ||
| 28 | #define IR_TYPE_OTHER (((u64)1) << 63l) | ||
| 29 | |||
| 30 | struct ir_scancode { | ||
| 31 | u16 scancode; | ||
| 32 | u32 keycode; | ||
| 33 | }; | ||
| 34 | |||
| 35 | struct ir_scancode_table { | ||
| 36 | struct ir_scancode *scan; | ||
| 37 | int size; | ||
| 38 | u64 ir_type; | ||
| 39 | spinlock_t lock; | ||
| 40 | }; | 32 | }; |
| 41 | 33 | ||
| 34 | /** | ||
| 35 | * struct ir_dev_props - Allow caller drivers to set special properties | ||
| 36 | * @driver_type: specifies if the driver or hardware have already a decoder, | ||
| 37 | * or if it needs to use the IR raw event decoders to produce a scancode | ||
| 38 | * @allowed_protos: bitmask with the supported IR_TYPE_* protocols | ||
| 39 | * @scanmask: some hardware decoders are not capable of providing the full | ||
| 40 | * scancode to the application. As this is a hardware limit, we can't do | ||
| 41 | * anything with it. Yet, as the same keycode table can be used with other | ||
| 42 | * devices, a mask is provided to allow its usage. Drivers should generally | ||
| 43 | * leave this field in blank | ||
| 44 | * @priv: driver-specific data, to be used on the callbacks | ||
| 45 | * @change_protocol: allow changing the protocol used on hardware decoders | ||
| 46 | * @open: callback to allow drivers to enable polling/irq when IR input device | ||
| 47 | * is opened. | ||
| 48 | * @close: callback to allow drivers to disable polling/irq when IR input device | ||
| 49 | * is opened. | ||
| 50 | */ | ||
| 42 | struct ir_dev_props { | 51 | struct ir_dev_props { |
| 43 | unsigned long allowed_protos; | 52 | enum rc_driver_type driver_type; |
| 44 | void *priv; | 53 | unsigned long allowed_protos; |
| 45 | int (*change_protocol)(void *priv, u64 ir_type); | 54 | u32 scanmask; |
| 55 | void *priv; | ||
| 56 | int (*change_protocol)(void *priv, u64 ir_type); | ||
| 57 | int (*open)(void *priv); | ||
| 58 | void (*close)(void *priv); | ||
| 46 | }; | 59 | }; |
| 47 | 60 | ||
| 48 | |||
| 49 | struct ir_input_dev { | 61 | struct ir_input_dev { |
| 50 | struct input_dev *dev; /* Input device*/ | 62 | struct device dev; /* device */ |
| 63 | char *driver_name; /* Name of the driver module */ | ||
| 51 | struct ir_scancode_table rc_tab; /* scan/key table */ | 64 | struct ir_scancode_table rc_tab; /* scan/key table */ |
| 52 | unsigned long devno; /* device number */ | 65 | unsigned long devno; /* device number */ |
| 53 | struct attribute_group attr; /* IR attributes */ | ||
| 54 | struct device *class_dev; /* virtual class dev */ | ||
| 55 | const struct ir_dev_props *props; /* Device properties */ | 66 | const struct ir_dev_props *props; /* Device properties */ |
| 67 | struct ir_raw_event_ctrl *raw; /* for raw pulse/space events */ | ||
| 68 | struct input_dev *input_dev; /* the input device associated with this device */ | ||
| 69 | |||
| 70 | /* key info - needed by IR keycode handlers */ | ||
| 71 | spinlock_t keylock; /* protects the below members */ | ||
| 72 | bool keypressed; /* current state */ | ||
| 73 | unsigned long keyup_jiffies; /* when should the current keypress be released? */ | ||
| 74 | struct timer_list timer_keyup; /* timer for releasing a keypress */ | ||
| 75 | u32 last_keycode; /* keycode of last command */ | ||
| 76 | u32 last_scancode; /* scancode of last command */ | ||
| 77 | u8 last_toggle; /* toggle of last command */ | ||
| 56 | }; | 78 | }; |
| 57 | #define to_ir_input_dev(_attr) container_of(_attr, struct ir_input_dev, attr) | ||
| 58 | 79 | ||
| 59 | /* Routines from ir-keytable.c */ | 80 | enum raw_event_type { |
| 81 | IR_SPACE = (1 << 0), | ||
| 82 | IR_PULSE = (1 << 1), | ||
| 83 | IR_START_EVENT = (1 << 2), | ||
| 84 | IR_STOP_EVENT = (1 << 3), | ||
| 85 | }; | ||
| 60 | 86 | ||
| 61 | u32 ir_g_keycode_from_table(struct input_dev *input_dev, | 87 | #define to_ir_input_dev(_attr) container_of(_attr, struct ir_input_dev, attr) |
| 62 | u32 scancode); | ||
| 63 | 88 | ||
| 64 | int ir_input_register(struct input_dev *dev, | 89 | /* From ir-keytable.c */ |
| 90 | int __ir_input_register(struct input_dev *dev, | ||
| 65 | const struct ir_scancode_table *ir_codes, | 91 | const struct ir_scancode_table *ir_codes, |
| 66 | const struct ir_dev_props *props); | 92 | const struct ir_dev_props *props, |
| 93 | const char *driver_name); | ||
| 94 | |||
| 95 | static inline int ir_input_register(struct input_dev *dev, | ||
| 96 | const char *map_name, | ||
| 97 | const struct ir_dev_props *props, | ||
| 98 | const char *driver_name) { | ||
| 99 | struct ir_scancode_table *ir_codes; | ||
| 100 | struct ir_input_dev *ir_dev; | ||
| 101 | int rc; | ||
| 102 | |||
| 103 | if (!map_name) | ||
| 104 | return -EINVAL; | ||
| 105 | |||
| 106 | ir_codes = get_rc_map(map_name); | ||
| 107 | if (!ir_codes) | ||
| 108 | return -EINVAL; | ||
| 109 | |||
| 110 | rc = __ir_input_register(dev, ir_codes, props, driver_name); | ||
| 111 | if (rc < 0) | ||
| 112 | return -EINVAL; | ||
| 113 | |||
| 114 | ir_dev = input_get_drvdata(dev); | ||
| 115 | |||
| 116 | if (!rc && ir_dev->props && ir_dev->props->change_protocol) | ||
| 117 | rc = ir_dev->props->change_protocol(ir_dev->props->priv, | ||
| 118 | ir_codes->ir_type); | ||
| 119 | |||
| 120 | return rc; | ||
| 121 | } | ||
| 122 | |||
| 67 | void ir_input_unregister(struct input_dev *input_dev); | 123 | void ir_input_unregister(struct input_dev *input_dev); |
| 68 | 124 | ||
| 69 | /* Routines from ir-sysfs.c */ | 125 | void ir_repeat(struct input_dev *dev); |
| 126 | void ir_keydown(struct input_dev *dev, int scancode, u8 toggle); | ||
| 127 | u32 ir_g_keycode_from_table(struct input_dev *input_dev, u32 scancode); | ||
| 128 | |||
| 129 | /* From ir-raw-event.c */ | ||
| 130 | |||
| 131 | struct ir_raw_event { | ||
| 132 | unsigned pulse:1; | ||
| 133 | unsigned duration:31; | ||
| 134 | }; | ||
| 135 | |||
| 136 | #define IR_MAX_DURATION 0x7FFFFFFF /* a bit more than 2 seconds */ | ||
| 70 | 137 | ||
| 71 | int ir_register_class(struct input_dev *input_dev); | 138 | void ir_raw_event_handle(struct input_dev *input_dev); |
| 72 | void ir_unregister_class(struct input_dev *input_dev); | 139 | int ir_raw_event_store(struct input_dev *input_dev, struct ir_raw_event *ev); |
| 140 | int ir_raw_event_store_edge(struct input_dev *input_dev, enum raw_event_type type); | ||
| 141 | static inline void ir_raw_event_reset(struct input_dev *input_dev) | ||
| 142 | { | ||
| 143 | struct ir_raw_event ev = { .pulse = false, .duration = 0 }; | ||
| 144 | ir_raw_event_store(input_dev, &ev); | ||
| 145 | ir_raw_event_handle(input_dev); | ||
| 146 | } | ||
| 73 | 147 | ||
| 74 | #endif | 148 | #endif /* _IR_CORE */ |
diff --git a/include/media/ir-kbd-i2c.h b/include/media/ir-kbd-i2c.h index 9142936603cc..0506e45c9a4f 100644 --- a/include/media/ir-kbd-i2c.h +++ b/include/media/ir-kbd-i2c.h | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | struct IR_i2c; | 6 | struct IR_i2c; |
| 7 | 7 | ||
| 8 | struct IR_i2c { | 8 | struct IR_i2c { |
| 9 | struct ir_scancode_table *ir_codes; | 9 | char *ir_codes; |
| 10 | 10 | ||
| 11 | struct i2c_client *c; | 11 | struct i2c_client *c; |
| 12 | struct input_dev *input; | 12 | struct input_dev *input; |
| @@ -34,9 +34,9 @@ enum ir_kbd_get_key_fn { | |||
| 34 | 34 | ||
| 35 | /* Can be passed when instantiating an ir_video i2c device */ | 35 | /* Can be passed when instantiating an ir_video i2c device */ |
| 36 | struct IR_i2c_init_data { | 36 | struct IR_i2c_init_data { |
| 37 | struct ir_scancode_table *ir_codes; | 37 | char *ir_codes; |
| 38 | const char *name; | 38 | const char *name; |
| 39 | u64 type; /* IR_TYPE_RC5, IR_TYPE_PD, etc */ | 39 | u64 type; /* IR_TYPE_RC5, etc */ |
| 40 | /* | 40 | /* |
| 41 | * Specify either a function pointer or a value indicating one of | 41 | * Specify either a function pointer or a value indicating one of |
| 42 | * ir_kbd_i2c's internal get_key functions | 42 | * ir_kbd_i2c's internal get_key functions |
diff --git a/include/media/rc-map.h b/include/media/rc-map.h new file mode 100644 index 000000000000..5833966a7100 --- /dev/null +++ b/include/media/rc-map.h | |||
| @@ -0,0 +1,121 @@ | |||
| 1 | /* | ||
| 2 | * rc-map.h - define RC map names used by RC drivers | ||
| 3 | * | ||
| 4 | * Copyright (c) 2010 by Mauro Carvalho Chehab <mchehab@redhat.com> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #include <linux/input.h> | ||
| 13 | |||
| 14 | #define IR_TYPE_UNKNOWN 0 | ||
| 15 | #define IR_TYPE_RC5 (1 << 0) /* Philips RC5 protocol */ | ||
| 16 | #define IR_TYPE_NEC (1 << 1) | ||
| 17 | #define IR_TYPE_RC6 (1 << 2) /* Philips RC6 protocol */ | ||
| 18 | #define IR_TYPE_JVC (1 << 3) /* JVC protocol */ | ||
| 19 | #define IR_TYPE_SONY (1 << 4) /* Sony12/15/20 protocol */ | ||
| 20 | #define IR_TYPE_OTHER (1u << 31) | ||
| 21 | |||
| 22 | struct ir_scancode { | ||
| 23 | u32 scancode; | ||
| 24 | u32 keycode; | ||
| 25 | }; | ||
| 26 | |||
| 27 | struct ir_scancode_table { | ||
| 28 | struct ir_scancode *scan; | ||
| 29 | unsigned int size; /* Max number of entries */ | ||
| 30 | unsigned int len; /* Used number of entries */ | ||
| 31 | unsigned int alloc; /* Size of *scan in bytes */ | ||
| 32 | u64 ir_type; | ||
| 33 | char *name; | ||
| 34 | spinlock_t lock; | ||
| 35 | }; | ||
| 36 | |||
| 37 | struct rc_keymap { | ||
| 38 | struct list_head list; | ||
| 39 | struct ir_scancode_table map; | ||
| 40 | }; | ||
| 41 | |||
| 42 | /* Routines from rc-map.c */ | ||
| 43 | |||
| 44 | int ir_register_map(struct rc_keymap *map); | ||
| 45 | void ir_unregister_map(struct rc_keymap *map); | ||
| 46 | struct ir_scancode_table *get_rc_map(const char *name); | ||
| 47 | void rc_map_init(void); | ||
| 48 | |||
| 49 | /* Names of the several keytables defined in-kernel */ | ||
| 50 | |||
| 51 | #define RC_MAP_ADSTECH_DVB_T_PCI "rc-adstech-dvb-t-pci" | ||
| 52 | #define RC_MAP_APAC_VIEWCOMP "rc-apac-viewcomp" | ||
| 53 | #define RC_MAP_ASUS_PC39 "rc-asus-pc39" | ||
| 54 | #define RC_MAP_ATI_TV_WONDER_HD_600 "rc-ati-tv-wonder-hd-600" | ||
| 55 | #define RC_MAP_AVERMEDIA_A16D "rc-avermedia-a16d" | ||
| 56 | #define RC_MAP_AVERMEDIA_CARDBUS "rc-avermedia-cardbus" | ||
| 57 | #define RC_MAP_AVERMEDIA_DVBT "rc-avermedia-dvbt" | ||
| 58 | #define RC_MAP_AVERMEDIA_M135A_RM_JX "rc-avermedia-m135a-rm-jx" | ||
| 59 | #define RC_MAP_AVERMEDIA "rc-avermedia" | ||
| 60 | #define RC_MAP_AVERTV_303 "rc-avertv-303" | ||
| 61 | #define RC_MAP_BEHOLD_COLUMBUS "rc-behold-columbus" | ||
| 62 | #define RC_MAP_BEHOLD "rc-behold" | ||
| 63 | #define RC_MAP_BUDGET_CI_OLD "rc-budget-ci-old" | ||
| 64 | #define RC_MAP_CINERGY_1400 "rc-cinergy-1400" | ||
| 65 | #define RC_MAP_CINERGY "rc-cinergy" | ||
| 66 | #define RC_MAP_DM1105_NEC "rc-dm1105-nec" | ||
| 67 | #define RC_MAP_DNTV_LIVE_DVBT_PRO "rc-dntv-live-dvbt-pro" | ||
| 68 | #define RC_MAP_DNTV_LIVE_DVB_T "rc-dntv-live-dvb-t" | ||
| 69 | #define RC_MAP_EMPTY "rc-empty" | ||
| 70 | #define RC_MAP_EM_TERRATEC "rc-em-terratec" | ||
| 71 | #define RC_MAP_ENCORE_ENLTV2 "rc-encore-enltv2" | ||
| 72 | #define RC_MAP_ENCORE_ENLTV_FM53 "rc-encore-enltv-fm53" | ||
| 73 | #define RC_MAP_ENCORE_ENLTV "rc-encore-enltv" | ||
| 74 | #define RC_MAP_EVGA_INDTUBE "rc-evga-indtube" | ||
| 75 | #define RC_MAP_EZTV "rc-eztv" | ||
| 76 | #define RC_MAP_FLYDVB "rc-flydvb" | ||
| 77 | #define RC_MAP_FLYVIDEO "rc-flyvideo" | ||
| 78 | #define RC_MAP_FUSIONHDTV_MCE "rc-fusionhdtv-mce" | ||
| 79 | #define RC_MAP_GADMEI_RM008Z "rc-gadmei-rm008z" | ||
| 80 | #define RC_MAP_GENIUS_TVGO_A11MCE "rc-genius-tvgo-a11mce" | ||
| 81 | #define RC_MAP_GOTVIEW7135 "rc-gotview7135" | ||
| 82 | #define RC_MAP_HAUPPAUGE_NEW "rc-hauppauge-new" | ||
| 83 | #define RC_MAP_IMON_MCE "rc-imon-mce" | ||
| 84 | #define RC_MAP_IMON_PAD "rc-imon-pad" | ||
| 85 | #define RC_MAP_IODATA_BCTV7E "rc-iodata-bctv7e" | ||
| 86 | #define RC_MAP_KAIOMY "rc-kaiomy" | ||
| 87 | #define RC_MAP_KWORLD_315U "rc-kworld-315u" | ||
| 88 | #define RC_MAP_KWORLD_PLUS_TV_ANALOG "rc-kworld-plus-tv-analog" | ||
| 89 | #define RC_MAP_MANLI "rc-manli" | ||
| 90 | #define RC_MAP_MSI_TVANYWHERE_PLUS "rc-msi-tvanywhere-plus" | ||
| 91 | #define RC_MAP_MSI_TVANYWHERE "rc-msi-tvanywhere" | ||
| 92 | #define RC_MAP_NEBULA "rc-nebula" | ||
| 93 | #define RC_MAP_NEC_TERRATEC_CINERGY_XS "rc-nec-terratec-cinergy-xs" | ||
| 94 | #define RC_MAP_NORWOOD "rc-norwood" | ||
| 95 | #define RC_MAP_NPGTECH "rc-npgtech" | ||
| 96 | #define RC_MAP_PCTV_SEDNA "rc-pctv-sedna" | ||
| 97 | #define RC_MAP_PINNACLE_COLOR "rc-pinnacle-color" | ||
| 98 | #define RC_MAP_PINNACLE_GREY "rc-pinnacle-grey" | ||
| 99 | #define RC_MAP_PINNACLE_PCTV_HD "rc-pinnacle-pctv-hd" | ||
| 100 | #define RC_MAP_PIXELVIEW_NEW "rc-pixelview-new" | ||
| 101 | #define RC_MAP_PIXELVIEW "rc-pixelview" | ||
| 102 | #define RC_MAP_PIXELVIEW_MK12 "rc-pixelview-mk12" | ||
| 103 | #define RC_MAP_POWERCOLOR_REAL_ANGEL "rc-powercolor-real-angel" | ||
| 104 | #define RC_MAP_PROTEUS_2309 "rc-proteus-2309" | ||
| 105 | #define RC_MAP_PURPLETV "rc-purpletv" | ||
| 106 | #define RC_MAP_PV951 "rc-pv951" | ||
| 107 | #define RC_MAP_RC5_HAUPPAUGE_NEW "rc-rc5-hauppauge-new" | ||
| 108 | #define RC_MAP_RC5_TV "rc-rc5-tv" | ||
| 109 | #define RC_MAP_REAL_AUDIO_220_32_KEYS "rc-real-audio-220-32-keys" | ||
| 110 | #define RC_MAP_TBS_NEC "rc-tbs-nec" | ||
| 111 | #define RC_MAP_TERRATEC_CINERGY_XS "rc-terratec-cinergy-xs" | ||
| 112 | #define RC_MAP_TEVII_NEC "rc-tevii-nec" | ||
| 113 | #define RC_MAP_TT_1500 "rc-tt-1500" | ||
| 114 | #define RC_MAP_VIDEOMATE_S350 "rc-videomate-s350" | ||
| 115 | #define RC_MAP_VIDEOMATE_TV_PVR "rc-videomate-tv-pvr" | ||
| 116 | #define RC_MAP_WINFAST "rc-winfast" | ||
| 117 | #define RC_MAP_WINFAST_USBII_DELUXE "rc-winfast-usbii-deluxe" | ||
| 118 | /* | ||
| 119 | * Please, do not just append newer Remote Controller names at the end. | ||
| 120 | * The names should be ordered in alphabetical order | ||
| 121 | */ | ||
diff --git a/include/media/sh_vou.h b/include/media/sh_vou.h new file mode 100644 index 000000000000..a3ef30242b00 --- /dev/null +++ b/include/media/sh_vou.h | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | /* | ||
| 2 | * SuperH Video Output Unit (VOU) driver header | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010, Guennadi Liakhovetski <g.liakhovetski@gmx.de> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | */ | ||
| 10 | #ifndef SH_VOU_H | ||
| 11 | #define SH_VOU_H | ||
| 12 | |||
| 13 | #include <linux/i2c.h> | ||
| 14 | |||
| 15 | /* Bus flags */ | ||
| 16 | #define SH_VOU_PCLK_FALLING (1 << 0) | ||
| 17 | #define SH_VOU_HSYNC_LOW (1 << 1) | ||
| 18 | #define SH_VOU_VSYNC_LOW (1 << 2) | ||
| 19 | |||
| 20 | enum sh_vou_bus_fmt { | ||
| 21 | SH_VOU_BUS_8BIT, | ||
| 22 | SH_VOU_BUS_16BIT, | ||
| 23 | SH_VOU_BUS_BT656, | ||
| 24 | }; | ||
| 25 | |||
| 26 | struct sh_vou_pdata { | ||
| 27 | enum sh_vou_bus_fmt bus_fmt; | ||
| 28 | int i2c_adap; | ||
| 29 | struct i2c_board_info *board_info; | ||
| 30 | unsigned long flags; | ||
| 31 | char *module_name; | ||
| 32 | }; | ||
| 33 | |||
| 34 | #endif | ||
diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h index 9d69f01b6fa2..c9a5bbfa6ab5 100644 --- a/include/media/soc_camera.h +++ b/include/media/soc_camera.h | |||
| @@ -266,8 +266,8 @@ static inline unsigned long soc_camera_bus_param_compatible( | |||
| 266 | common_flags; | 266 | common_flags; |
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | static inline void soc_camera_limit_side(unsigned int *start, | 269 | static inline void soc_camera_limit_side(int *start, int *length, |
| 270 | unsigned int *length, unsigned int start_min, | 270 | unsigned int start_min, |
| 271 | unsigned int length_min, unsigned int length_max) | 271 | unsigned int length_min, unsigned int length_max) |
| 272 | { | 272 | { |
| 273 | if (*length < length_min) | 273 | if (*length < length_min) |
| @@ -284,4 +284,12 @@ static inline void soc_camera_limit_side(unsigned int *start, | |||
| 284 | extern unsigned long soc_camera_apply_sensor_flags(struct soc_camera_link *icl, | 284 | extern unsigned long soc_camera_apply_sensor_flags(struct soc_camera_link *icl, |
| 285 | unsigned long flags); | 285 | unsigned long flags); |
| 286 | 286 | ||
| 287 | /* This is only temporary here - until v4l2-subdev begins to link to video_device */ | ||
| 288 | #include <linux/i2c.h> | ||
| 289 | static inline struct video_device *soc_camera_i2c_to_vdev(struct i2c_client *client) | ||
| 290 | { | ||
| 291 | struct soc_camera_device *icd = client->dev.platform_data; | ||
| 292 | return icd->vdev; | ||
| 293 | } | ||
| 294 | |||
| 287 | #endif | 295 | #endif |
diff --git a/include/media/v4l2-chip-ident.h b/include/media/v4l2-chip-ident.h index 56abf21dd786..21b4428c12ab 100644 --- a/include/media/v4l2-chip-ident.h +++ b/include/media/v4l2-chip-ident.h | |||
| @@ -25,6 +25,10 @@ | |||
| 25 | #define V4L2_CHIP_IDENT_H_ | 25 | #define V4L2_CHIP_IDENT_H_ |
| 26 | 26 | ||
| 27 | /* VIDIOC_DBG_G_CHIP_IDENT: identifies the actual chip installed on the board */ | 27 | /* VIDIOC_DBG_G_CHIP_IDENT: identifies the actual chip installed on the board */ |
| 28 | |||
| 29 | /* KEEP THIS LIST ORDERED BY ID! | ||
| 30 | Otherwise it will be hard to see which ranges are already in use when | ||
| 31 | adding support to a new chip family. */ | ||
| 28 | enum { | 32 | enum { |
| 29 | /* general idents: reserved range 0-49 */ | 33 | /* general idents: reserved range 0-49 */ |
| 30 | V4L2_IDENT_NONE = 0, /* No chip matched */ | 34 | V4L2_IDENT_NONE = 0, /* No chip matched */ |
| @@ -77,17 +81,14 @@ enum { | |||
| 77 | V4L2_IDENT_CX23417 = 417, | 81 | V4L2_IDENT_CX23417 = 417, |
| 78 | V4L2_IDENT_CX23418 = 418, | 82 | V4L2_IDENT_CX23418 = 418, |
| 79 | 83 | ||
| 80 | /* module au0828 */ | ||
| 81 | V4L2_IDENT_AU0828 = 828, | ||
| 82 | |||
| 83 | /* module indycam: just ident 2000 */ | ||
| 84 | V4L2_IDENT_INDYCAM = 2000, | ||
| 85 | |||
| 86 | /* module bt819: reserved range 810-819 */ | 84 | /* module bt819: reserved range 810-819 */ |
| 87 | V4L2_IDENT_BT815A = 815, | 85 | V4L2_IDENT_BT815A = 815, |
| 88 | V4L2_IDENT_BT817A = 817, | 86 | V4L2_IDENT_BT817A = 817, |
| 89 | V4L2_IDENT_BT819A = 819, | 87 | V4L2_IDENT_BT819A = 819, |
| 90 | 88 | ||
| 89 | /* module au0828 */ | ||
| 90 | V4L2_IDENT_AU0828 = 828, | ||
| 91 | |||
| 91 | /* module bt856: just ident 856 */ | 92 | /* module bt856: just ident 856 */ |
| 92 | V4L2_IDENT_BT856 = 856, | 93 | V4L2_IDENT_BT856 = 856, |
| 93 | 94 | ||
| @@ -99,6 +100,9 @@ enum { | |||
| 99 | V4L2_IDENT_KS0127 = 1127, | 100 | V4L2_IDENT_KS0127 = 1127, |
| 100 | V4L2_IDENT_KS0127B = 1128, | 101 | V4L2_IDENT_KS0127B = 1128, |
| 101 | 102 | ||
| 103 | /* module indycam: just ident 2000 */ | ||
| 104 | V4L2_IDENT_INDYCAM = 2000, | ||
| 105 | |||
| 102 | /* module vp27smpx: just ident 2700 */ | 106 | /* module vp27smpx: just ident 2700 */ |
| 103 | V4L2_IDENT_VP27SMPX = 2700, | 107 | V4L2_IDENT_VP27SMPX = 2700, |
| 104 | 108 | ||
| @@ -162,20 +166,21 @@ enum { | |||
| 162 | /* module saa7706h: just ident 7706 */ | 166 | /* module saa7706h: just ident 7706 */ |
| 163 | V4L2_IDENT_SAA7706H = 7706, | 167 | V4L2_IDENT_SAA7706H = 7706, |
| 164 | 168 | ||
| 169 | /* module mt9v011, just ident 8243 */ | ||
| 170 | V4L2_IDENT_MT9V011 = 8243, | ||
| 171 | |||
| 165 | /* module wm8739: just ident 8739 */ | 172 | /* module wm8739: just ident 8739 */ |
| 166 | V4L2_IDENT_WM8739 = 8739, | 173 | V4L2_IDENT_WM8739 = 8739, |
| 167 | 174 | ||
| 168 | /* module wm8775: just ident 8775 */ | 175 | /* module wm8775: just ident 8775 */ |
| 169 | V4L2_IDENT_WM8775 = 8775, | 176 | V4L2_IDENT_WM8775 = 8775, |
| 170 | 177 | ||
| 171 | /* module tda9840: just ident 9840 */ | ||
| 172 | V4L2_IDENT_TDA9840 = 9840, | ||
| 173 | |||
| 174 | /* module cafe_ccic, just ident 8801 */ | 178 | /* module cafe_ccic, just ident 8801 */ |
| 175 | V4L2_IDENT_CAFE = 8801, | 179 | V4L2_IDENT_CAFE = 8801, |
| 176 | 180 | ||
| 177 | /* module mt9v011, just ident 8243 */ | 181 | /* AKM AK8813/AK8814 */ |
| 178 | V4L2_IDENT_MT9V011 = 8243, | 182 | V4L2_IDENT_AK8813 = 8813, |
| 183 | V4L2_IDENT_AK8814 = 8814, | ||
| 179 | 184 | ||
| 180 | /* module cx23885 and cx25840 */ | 185 | /* module cx23885 and cx25840 */ |
| 181 | V4L2_IDENT_CX23885 = 8850, | 186 | V4L2_IDENT_CX23885 = 8850, |
| @@ -186,6 +191,9 @@ enum { | |||
| 186 | V4L2_IDENT_CX23888_AV = 8881, /* Integrated A/V decoder */ | 191 | V4L2_IDENT_CX23888_AV = 8881, /* Integrated A/V decoder */ |
| 187 | V4L2_IDENT_CX23888_IR = 8882, /* Integrated infrared controller */ | 192 | V4L2_IDENT_CX23888_IR = 8882, /* Integrated infrared controller */ |
| 188 | 193 | ||
| 194 | /* module tda9840: just ident 9840 */ | ||
| 195 | V4L2_IDENT_TDA9840 = 9840, | ||
| 196 | |||
| 189 | /* module tw9910: just ident 9910 */ | 197 | /* module tw9910: just ident 9910 */ |
| 190 | V4L2_IDENT_TW9910 = 9910, | 198 | V4L2_IDENT_TW9910 = 9910, |
| 191 | 199 | ||
| @@ -198,72 +206,70 @@ enum { | |||
| 198 | V4L2_IDENT_CX23101 = 23101, | 206 | V4L2_IDENT_CX23101 = 23101, |
| 199 | V4L2_IDENT_CX23102 = 23102, | 207 | V4L2_IDENT_CX23102 = 23102, |
| 200 | 208 | ||
| 201 | /* module msp3400: reserved range 34000-34999 and 44000-44999 */ | 209 | /* module msp3400: reserved range 34000-34999 for msp34xx */ |
| 202 | V4L2_IDENT_MSPX4XX = 34000, /* generic MSPX4XX identifier, only | 210 | V4L2_IDENT_MSPX4XX = 34000, /* generic MSPX4XX identifier, only |
| 203 | use internally (tveeprom.c). */ | 211 | use internally (tveeprom.c). */ |
| 204 | 212 | ||
| 205 | V4L2_IDENT_MSP3400B = 34002, | 213 | V4L2_IDENT_MSP3400B = 34002, |
| 206 | V4L2_IDENT_MSP3410B = 34102, | ||
| 207 | |||
| 208 | V4L2_IDENT_MSP3400C = 34003, | 214 | V4L2_IDENT_MSP3400C = 34003, |
| 209 | V4L2_IDENT_MSP3410C = 34103, | ||
| 210 | |||
| 211 | V4L2_IDENT_MSP3400D = 34004, | 215 | V4L2_IDENT_MSP3400D = 34004, |
| 212 | V4L2_IDENT_MSP3410D = 34104, | 216 | V4L2_IDENT_MSP3400G = 34007, |
| 217 | V4L2_IDENT_MSP3401G = 34017, | ||
| 218 | V4L2_IDENT_MSP3402G = 34027, | ||
| 213 | V4L2_IDENT_MSP3405D = 34054, | 219 | V4L2_IDENT_MSP3405D = 34054, |
| 214 | V4L2_IDENT_MSP3415D = 34154, | 220 | V4L2_IDENT_MSP3405G = 34057, |
| 215 | V4L2_IDENT_MSP3407D = 34074, | 221 | V4L2_IDENT_MSP3407D = 34074, |
| 216 | V4L2_IDENT_MSP3417D = 34174, | 222 | V4L2_IDENT_MSP3407G = 34077, |
| 217 | 223 | ||
| 218 | V4L2_IDENT_MSP3400G = 34007, | 224 | V4L2_IDENT_MSP3410B = 34102, |
| 225 | V4L2_IDENT_MSP3410C = 34103, | ||
| 226 | V4L2_IDENT_MSP3410D = 34104, | ||
| 219 | V4L2_IDENT_MSP3410G = 34107, | 227 | V4L2_IDENT_MSP3410G = 34107, |
| 220 | V4L2_IDENT_MSP3420G = 34207, | ||
| 221 | V4L2_IDENT_MSP3430G = 34307, | ||
| 222 | V4L2_IDENT_MSP3440G = 34407, | ||
| 223 | V4L2_IDENT_MSP3450G = 34507, | ||
| 224 | V4L2_IDENT_MSP3460G = 34607, | ||
| 225 | |||
| 226 | V4L2_IDENT_MSP3401G = 34017, | ||
| 227 | V4L2_IDENT_MSP3411G = 34117, | 228 | V4L2_IDENT_MSP3411G = 34117, |
| 228 | V4L2_IDENT_MSP3421G = 34217, | ||
| 229 | V4L2_IDENT_MSP3431G = 34317, | ||
| 230 | V4L2_IDENT_MSP3441G = 34417, | ||
| 231 | V4L2_IDENT_MSP3451G = 34517, | ||
| 232 | V4L2_IDENT_MSP3461G = 34617, | ||
| 233 | |||
| 234 | V4L2_IDENT_MSP3402G = 34027, | ||
| 235 | V4L2_IDENT_MSP3412G = 34127, | 229 | V4L2_IDENT_MSP3412G = 34127, |
| 236 | V4L2_IDENT_MSP3422G = 34227, | 230 | V4L2_IDENT_MSP3415D = 34154, |
| 237 | V4L2_IDENT_MSP3442G = 34427, | ||
| 238 | V4L2_IDENT_MSP3452G = 34527, | ||
| 239 | |||
| 240 | V4L2_IDENT_MSP3405G = 34057, | ||
| 241 | V4L2_IDENT_MSP3415G = 34157, | 231 | V4L2_IDENT_MSP3415G = 34157, |
| 242 | V4L2_IDENT_MSP3425G = 34257, | 232 | V4L2_IDENT_MSP3417D = 34174, |
| 243 | V4L2_IDENT_MSP3435G = 34357, | ||
| 244 | V4L2_IDENT_MSP3445G = 34457, | ||
| 245 | V4L2_IDENT_MSP3455G = 34557, | ||
| 246 | V4L2_IDENT_MSP3465G = 34657, | ||
| 247 | |||
| 248 | V4L2_IDENT_MSP3407G = 34077, | ||
| 249 | V4L2_IDENT_MSP3417G = 34177, | 233 | V4L2_IDENT_MSP3417G = 34177, |
| 234 | |||
| 235 | V4L2_IDENT_MSP3420G = 34207, | ||
| 236 | V4L2_IDENT_MSP3421G = 34217, | ||
| 237 | V4L2_IDENT_MSP3422G = 34227, | ||
| 238 | V4L2_IDENT_MSP3425G = 34257, | ||
| 250 | V4L2_IDENT_MSP3427G = 34277, | 239 | V4L2_IDENT_MSP3427G = 34277, |
| 240 | |||
| 241 | V4L2_IDENT_MSP3430G = 34307, | ||
| 242 | V4L2_IDENT_MSP3431G = 34317, | ||
| 243 | V4L2_IDENT_MSP3435G = 34357, | ||
| 251 | V4L2_IDENT_MSP3437G = 34377, | 244 | V4L2_IDENT_MSP3437G = 34377, |
| 245 | |||
| 246 | V4L2_IDENT_MSP3440G = 34407, | ||
| 247 | V4L2_IDENT_MSP3441G = 34417, | ||
| 248 | V4L2_IDENT_MSP3442G = 34427, | ||
| 249 | V4L2_IDENT_MSP3445G = 34457, | ||
| 252 | V4L2_IDENT_MSP3447G = 34477, | 250 | V4L2_IDENT_MSP3447G = 34477, |
| 251 | |||
| 252 | V4L2_IDENT_MSP3450G = 34507, | ||
| 253 | V4L2_IDENT_MSP3451G = 34517, | ||
| 254 | V4L2_IDENT_MSP3452G = 34527, | ||
| 255 | V4L2_IDENT_MSP3455G = 34557, | ||
| 253 | V4L2_IDENT_MSP3457G = 34577, | 256 | V4L2_IDENT_MSP3457G = 34577, |
| 257 | |||
| 258 | V4L2_IDENT_MSP3460G = 34607, | ||
| 259 | V4L2_IDENT_MSP3461G = 34617, | ||
| 260 | V4L2_IDENT_MSP3465G = 34657, | ||
| 254 | V4L2_IDENT_MSP3467G = 34677, | 261 | V4L2_IDENT_MSP3467G = 34677, |
| 255 | 262 | ||
| 256 | /* module msp3400: reserved range 34000-34999 and 44000-44999 */ | 263 | /* module msp3400: reserved range 44000-44999 for msp44xx */ |
| 257 | V4L2_IDENT_MSP4400G = 44007, | 264 | V4L2_IDENT_MSP4400G = 44007, |
| 258 | V4L2_IDENT_MSP4410G = 44107, | ||
| 259 | V4L2_IDENT_MSP4420G = 44207, | ||
| 260 | V4L2_IDENT_MSP4440G = 44407, | ||
| 261 | V4L2_IDENT_MSP4450G = 44507, | ||
| 262 | |||
| 263 | V4L2_IDENT_MSP4408G = 44087, | 265 | V4L2_IDENT_MSP4408G = 44087, |
| 266 | V4L2_IDENT_MSP4410G = 44107, | ||
| 264 | V4L2_IDENT_MSP4418G = 44187, | 267 | V4L2_IDENT_MSP4418G = 44187, |
| 268 | V4L2_IDENT_MSP4420G = 44207, | ||
| 265 | V4L2_IDENT_MSP4428G = 44287, | 269 | V4L2_IDENT_MSP4428G = 44287, |
| 270 | V4L2_IDENT_MSP4440G = 44407, | ||
| 266 | V4L2_IDENT_MSP4448G = 44487, | 271 | V4L2_IDENT_MSP4448G = 44487, |
| 272 | V4L2_IDENT_MSP4450G = 44507, | ||
| 267 | V4L2_IDENT_MSP4458G = 44587, | 273 | V4L2_IDENT_MSP4458G = 44587, |
| 268 | 274 | ||
| 269 | /* Micron CMOS sensor chips: 45000-45099 */ | 275 | /* Micron CMOS sensor chips: 45000-45099 */ |
| @@ -282,20 +288,27 @@ enum { | |||
| 282 | /* HV7131R CMOS sensor: just ident 46000 */ | 288 | /* HV7131R CMOS sensor: just ident 46000 */ |
| 283 | V4L2_IDENT_HV7131R = 46000, | 289 | V4L2_IDENT_HV7131R = 46000, |
| 284 | 290 | ||
| 291 | /* Sharp RJ54N1CB0C, 0xCB0C = 51980 */ | ||
| 292 | V4L2_IDENT_RJ54N1CB0C = 51980, | ||
| 293 | |||
| 294 | /* module m52790: just ident 52790 */ | ||
| 295 | V4L2_IDENT_M52790 = 52790, | ||
| 296 | |||
| 285 | /* module cs53132a: just ident 53132 */ | 297 | /* module cs53132a: just ident 53132 */ |
| 286 | V4L2_IDENT_CS53l32A = 53132, | 298 | V4L2_IDENT_CS53l32A = 53132, |
| 287 | 299 | ||
| 300 | /* modules upd61151 MPEG2 encoder: just ident 54000 */ | ||
| 301 | V4L2_IDENT_UPD61161 = 54000, | ||
| 302 | /* modules upd61152 MPEG2 encoder with AC3: just ident 54001 */ | ||
| 303 | V4L2_IDENT_UPD61162 = 54001, | ||
| 304 | |||
| 288 | /* module upd64031a: just ident 64031 */ | 305 | /* module upd64031a: just ident 64031 */ |
| 289 | V4L2_IDENT_UPD64031A = 64031, | 306 | V4L2_IDENT_UPD64031A = 64031, |
| 290 | 307 | ||
| 291 | /* module upd64083: just ident 64083 */ | 308 | /* module upd64083: just ident 64083 */ |
| 292 | V4L2_IDENT_UPD64083 = 64083, | 309 | V4L2_IDENT_UPD64083 = 64083, |
| 293 | 310 | ||
| 294 | /* module m52790: just ident 52790 */ | 311 | /* Don't just add new IDs at the end: KEEP THIS LIST ORDERED BY ID! */ |
| 295 | V4L2_IDENT_M52790 = 52790, | ||
| 296 | |||
| 297 | /* Sharp RJ54N1CB0C, 0xCB0C = 51980 */ | ||
| 298 | V4L2_IDENT_RJ54N1CB0C = 51980, | ||
| 299 | }; | 312 | }; |
| 300 | 313 | ||
| 301 | #endif | 314 | #endif |
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h index 1c7b259f341c..98b32645e5a7 100644 --- a/include/media/v4l2-common.h +++ b/include/media/v4l2-common.h | |||
| @@ -85,13 +85,13 @@ | |||
| 85 | struct v4l2_prio_state { | 85 | struct v4l2_prio_state { |
| 86 | atomic_t prios[4]; | 86 | atomic_t prios[4]; |
| 87 | }; | 87 | }; |
| 88 | int v4l2_prio_init(struct v4l2_prio_state *global); | 88 | void v4l2_prio_init(struct v4l2_prio_state *global); |
| 89 | int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local, | 89 | int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local, |
| 90 | enum v4l2_priority new); | 90 | enum v4l2_priority new); |
| 91 | int v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local); | 91 | void v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local); |
| 92 | int v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority *local); | 92 | void v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority local); |
| 93 | enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global); | 93 | enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global); |
| 94 | int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority *local); | 94 | int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority local); |
| 95 | 95 | ||
| 96 | /* ------------------------------------------------------------------------- */ | 96 | /* ------------------------------------------------------------------------- */ |
| 97 | 97 | ||
| @@ -184,6 +184,25 @@ const unsigned short *v4l2_i2c_tuner_addrs(enum v4l2_i2c_tuner_type type); | |||
| 184 | 184 | ||
| 185 | /* ------------------------------------------------------------------------- */ | 185 | /* ------------------------------------------------------------------------- */ |
| 186 | 186 | ||
| 187 | /* SPI Helper functions */ | ||
| 188 | #if defined(CONFIG_SPI) | ||
| 189 | |||
| 190 | #include <linux/spi/spi.h> | ||
| 191 | |||
| 192 | struct spi_device; | ||
| 193 | |||
| 194 | /* Load an spi module and return an initialized v4l2_subdev struct. | ||
| 195 | The client_type argument is the name of the chip that's on the adapter. */ | ||
| 196 | struct v4l2_subdev *v4l2_spi_new_subdev(struct v4l2_device *v4l2_dev, | ||
| 197 | struct spi_master *master, struct spi_board_info *info); | ||
| 198 | |||
| 199 | /* Initialize an v4l2_subdev with data from an spi_device struct */ | ||
| 200 | void v4l2_spi_subdev_init(struct v4l2_subdev *sd, struct spi_device *spi, | ||
| 201 | const struct v4l2_subdev_ops *ops); | ||
| 202 | #endif | ||
| 203 | |||
| 204 | /* ------------------------------------------------------------------------- */ | ||
| 205 | |||
| 187 | /* Note: these remaining ioctls/structs should be removed as well, but they are | 206 | /* Note: these remaining ioctls/structs should be removed as well, but they are |
| 188 | still used in tuner-simple.c (TUNER_SET_CONFIG), cx18/ivtv (RESET) and | 207 | still used in tuner-simple.c (TUNER_SET_CONFIG), cx18/ivtv (RESET) and |
| 189 | v4l2-int-device.h (v4l2_routing). To remove these ioctls some more cleanup | 208 | v4l2-int-device.h (v4l2_routing). To remove these ioctls some more cleanup |
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h index 2dee93892ea2..bebe44b03e0f 100644 --- a/include/media/v4l2-dev.h +++ b/include/media/v4l2-dev.h | |||
| @@ -32,6 +32,7 @@ struct v4l2_device; | |||
| 32 | Drivers can clear this flag if they want to block all future | 32 | Drivers can clear this flag if they want to block all future |
| 33 | device access. It is cleared by video_unregister_device. */ | 33 | device access. It is cleared by video_unregister_device. */ |
| 34 | #define V4L2_FL_REGISTERED (0) | 34 | #define V4L2_FL_REGISTERED (0) |
| 35 | #define V4L2_FL_USES_V4L2_FH (1) | ||
| 35 | 36 | ||
| 36 | struct v4l2_file_operations { | 37 | struct v4l2_file_operations { |
| 37 | struct module *owner; | 38 | struct module *owner; |
| @@ -77,6 +78,10 @@ struct video_device | |||
| 77 | /* attribute to differentiate multiple indices on one physical device */ | 78 | /* attribute to differentiate multiple indices on one physical device */ |
| 78 | int index; | 79 | int index; |
| 79 | 80 | ||
| 81 | /* V4L2 file handles */ | ||
| 82 | spinlock_t fh_lock; /* Lock for all v4l2_fhs */ | ||
| 83 | struct list_head fh_list; /* List of struct v4l2_fh */ | ||
| 84 | |||
| 80 | int debug; /* Activates debug level*/ | 85 | int debug; /* Activates debug level*/ |
| 81 | 86 | ||
| 82 | /* Video standard vars */ | 87 | /* Video standard vars */ |
diff --git a/include/media/v4l2-event.h b/include/media/v4l2-event.h new file mode 100644 index 000000000000..3b86177c8cd2 --- /dev/null +++ b/include/media/v4l2-event.h | |||
| @@ -0,0 +1,67 @@ | |||
| 1 | /* | ||
| 2 | * v4l2-event.h | ||
| 3 | * | ||
| 4 | * V4L2 events. | ||
| 5 | * | ||
| 6 | * Copyright (C) 2009--2010 Nokia Corporation. | ||
| 7 | * | ||
| 8 | * Contact: Sakari Ailus <sakari.ailus@maxwell.research.nokia.com> | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or | ||
| 11 | * modify it under the terms of the GNU General Public License | ||
| 12 | * version 2 as published by the Free Software Foundation. | ||
| 13 | * | ||
| 14 | * This program is distributed in the hope that it will be useful, but | ||
| 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 17 | * General Public License for more details. | ||
| 18 | * | ||
| 19 | * You should have received a copy of the GNU General Public License | ||
| 20 | * along with this program; if not, write to the Free Software | ||
| 21 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA | ||
| 22 | * 02110-1301 USA | ||
| 23 | */ | ||
| 24 | |||
| 25 | #ifndef V4L2_EVENT_H | ||
| 26 | #define V4L2_EVENT_H | ||
| 27 | |||
| 28 | #include <linux/types.h> | ||
| 29 | #include <linux/videodev2.h> | ||
| 30 | #include <linux/wait.h> | ||
| 31 | |||
| 32 | struct v4l2_fh; | ||
| 33 | struct video_device; | ||
| 34 | |||
| 35 | struct v4l2_kevent { | ||
| 36 | struct list_head list; | ||
| 37 | struct v4l2_event event; | ||
| 38 | }; | ||
| 39 | |||
| 40 | struct v4l2_subscribed_event { | ||
| 41 | struct list_head list; | ||
| 42 | u32 type; | ||
| 43 | }; | ||
| 44 | |||
| 45 | struct v4l2_events { | ||
| 46 | wait_queue_head_t wait; | ||
| 47 | struct list_head subscribed; /* Subscribed events */ | ||
| 48 | struct list_head free; /* Events ready for use */ | ||
| 49 | struct list_head available; /* Dequeueable event */ | ||
| 50 | unsigned int navailable; | ||
| 51 | unsigned int nallocated; /* Number of allocated events */ | ||
| 52 | u32 sequence; | ||
| 53 | }; | ||
| 54 | |||
| 55 | int v4l2_event_init(struct v4l2_fh *fh); | ||
| 56 | int v4l2_event_alloc(struct v4l2_fh *fh, unsigned int n); | ||
| 57 | void v4l2_event_free(struct v4l2_fh *fh); | ||
| 58 | int v4l2_event_dequeue(struct v4l2_fh *fh, struct v4l2_event *event, | ||
| 59 | int nonblocking); | ||
| 60 | void v4l2_event_queue(struct video_device *vdev, const struct v4l2_event *ev); | ||
| 61 | int v4l2_event_pending(struct v4l2_fh *fh); | ||
| 62 | int v4l2_event_subscribe(struct v4l2_fh *fh, | ||
| 63 | struct v4l2_event_subscription *sub); | ||
| 64 | int v4l2_event_unsubscribe(struct v4l2_fh *fh, | ||
| 65 | struct v4l2_event_subscription *sub); | ||
| 66 | |||
| 67 | #endif /* V4L2_EVENT_H */ | ||
diff --git a/include/media/v4l2-fh.h b/include/media/v4l2-fh.h new file mode 100644 index 000000000000..1d72dde320bf --- /dev/null +++ b/include/media/v4l2-fh.h | |||
| @@ -0,0 +1,65 @@ | |||
| 1 | /* | ||
| 2 | * v4l2-fh.h | ||
| 3 | * | ||
| 4 | * V4L2 file handle. Store per file handle data for the V4L2 | ||
| 5 | * framework. Using file handles is optional for the drivers. | ||
| 6 | * | ||
| 7 | * Copyright (C) 2009--2010 Nokia Corporation. | ||
| 8 | * | ||
| 9 | * Contact: Sakari Ailus <sakari.ailus@maxwell.research.nokia.com> | ||
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or | ||
| 12 | * modify it under the terms of the GNU General Public License | ||
| 13 | * version 2 as published by the Free Software Foundation. | ||
| 14 | * | ||
| 15 | * This program is distributed in the hope that it will be useful, but | ||
| 16 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 18 | * General Public License for more details. | ||
| 19 | * | ||
| 20 | * You should have received a copy of the GNU General Public License | ||
| 21 | * along with this program; if not, write to the Free Software | ||
| 22 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA | ||
| 23 | * 02110-1301 USA | ||
| 24 | */ | ||
| 25 | |||
| 26 | #ifndef V4L2_FH_H | ||
| 27 | #define V4L2_FH_H | ||
| 28 | |||
| 29 | #include <linux/list.h> | ||
| 30 | |||
| 31 | struct video_device; | ||
| 32 | struct v4l2_events; | ||
| 33 | |||
| 34 | struct v4l2_fh { | ||
| 35 | struct list_head list; | ||
| 36 | struct video_device *vdev; | ||
| 37 | struct v4l2_events *events; /* events, pending and subscribed */ | ||
| 38 | }; | ||
| 39 | |||
| 40 | /* | ||
| 41 | * Initialise the file handle. Parts of the V4L2 framework using the | ||
| 42 | * file handles should be initialised in this function. Must be called | ||
| 43 | * from driver's v4l2_file_operations->open() handler if the driver | ||
| 44 | * uses v4l2_fh. | ||
| 45 | */ | ||
| 46 | int v4l2_fh_init(struct v4l2_fh *fh, struct video_device *vdev); | ||
| 47 | /* | ||
| 48 | * Add the fh to the list of file handles on a video_device. The file | ||
| 49 | * handle must be initialised first. | ||
| 50 | */ | ||
| 51 | void v4l2_fh_add(struct v4l2_fh *fh); | ||
| 52 | /* | ||
| 53 | * Remove file handle from the list of file handles. Must be called in | ||
| 54 | * v4l2_file_operations->release() handler if the driver uses v4l2_fh. | ||
| 55 | */ | ||
| 56 | void v4l2_fh_del(struct v4l2_fh *fh); | ||
| 57 | /* | ||
| 58 | * Release resources related to a file handle. Parts of the V4L2 | ||
| 59 | * framework using the v4l2_fh must release their resources here, too. | ||
| 60 | * Must be called in v4l2_file_operations->release() handler if the | ||
| 61 | * driver uses v4l2_fh. | ||
| 62 | */ | ||
| 63 | void v4l2_fh_exit(struct v4l2_fh *fh); | ||
| 64 | |||
| 65 | #endif /* V4L2_EVENT_H */ | ||
diff --git a/include/media/v4l2-ioctl.h b/include/media/v4l2-ioctl.h index e8ba0f2efbae..06daa6e8e051 100644 --- a/include/media/v4l2-ioctl.h +++ b/include/media/v4l2-ioctl.h | |||
| @@ -21,6 +21,8 @@ | |||
| 21 | #include <linux/videodev2.h> | 21 | #include <linux/videodev2.h> |
| 22 | #endif | 22 | #endif |
| 23 | 23 | ||
| 24 | struct v4l2_fh; | ||
| 25 | |||
| 24 | struct v4l2_ioctl_ops { | 26 | struct v4l2_ioctl_ops { |
| 25 | /* ioctl callbacks */ | 27 | /* ioctl callbacks */ |
| 26 | 28 | ||
| @@ -254,6 +256,11 @@ struct v4l2_ioctl_ops { | |||
| 254 | int (*vidioc_g_dv_timings) (struct file *file, void *fh, | 256 | int (*vidioc_g_dv_timings) (struct file *file, void *fh, |
| 255 | struct v4l2_dv_timings *timings); | 257 | struct v4l2_dv_timings *timings); |
| 256 | 258 | ||
| 259 | int (*vidioc_subscribe_event) (struct v4l2_fh *fh, | ||
| 260 | struct v4l2_event_subscription *sub); | ||
| 261 | int (*vidioc_unsubscribe_event)(struct v4l2_fh *fh, | ||
| 262 | struct v4l2_event_subscription *sub); | ||
| 263 | |||
| 257 | /* For other private ioctls */ | 264 | /* For other private ioctls */ |
| 258 | long (*vidioc_default) (struct file *file, void *fh, | 265 | long (*vidioc_default) (struct file *file, void *fh, |
| 259 | int cmd, void *arg); | 266 | int cmd, void *arg); |
diff --git a/include/media/v4l2-mem2mem.h b/include/media/v4l2-mem2mem.h new file mode 100644 index 000000000000..8d149f1c58d0 --- /dev/null +++ b/include/media/v4l2-mem2mem.h | |||
| @@ -0,0 +1,201 @@ | |||
| 1 | /* | ||
| 2 | * Memory-to-memory device framework for Video for Linux 2. | ||
| 3 | * | ||
| 4 | * Helper functions for devices that use memory buffers for both source | ||
| 5 | * and destination. | ||
| 6 | * | ||
| 7 | * Copyright (c) 2009 Samsung Electronics Co., Ltd. | ||
| 8 | * Pawel Osciak, <p.osciak@samsung.com> | ||
| 9 | * Marek Szyprowski, <m.szyprowski@samsung.com> | ||
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or modify | ||
| 12 | * it under the terms of the GNU General Public License as published by the | ||
| 13 | * Free Software Foundation; either version 2 of the | ||
| 14 | * License, or (at your option) any later version | ||
| 15 | */ | ||
| 16 | |||
| 17 | #ifndef _MEDIA_V4L2_MEM2MEM_H | ||
| 18 | #define _MEDIA_V4L2_MEM2MEM_H | ||
| 19 | |||
| 20 | #include <media/videobuf-core.h> | ||
| 21 | |||
| 22 | /** | ||
| 23 | * struct v4l2_m2m_ops - mem-to-mem device driver callbacks | ||
| 24 | * @device_run: required. Begin the actual job (transaction) inside this | ||
| 25 | * callback. | ||
| 26 | * The job does NOT have to end before this callback returns | ||
| 27 | * (and it will be the usual case). When the job finishes, | ||
| 28 | * v4l2_m2m_job_finish() has to be called. | ||
| 29 | * @job_ready: optional. Should return 0 if the driver does not have a job | ||
| 30 | * fully prepared to run yet (i.e. it will not be able to finish a | ||
| 31 | * transaction without sleeping). If not provided, it will be | ||
| 32 | * assumed that one source and one destination buffer are all | ||
| 33 | * that is required for the driver to perform one full transaction. | ||
| 34 | * This method may not sleep. | ||
| 35 | * @job_abort: required. Informs the driver that it has to abort the currently | ||
| 36 | * running transaction as soon as possible (i.e. as soon as it can | ||
| 37 | * stop the device safely; e.g. in the next interrupt handler), | ||
| 38 | * even if the transaction would not have been finished by then. | ||
| 39 | * After the driver performs the necessary steps, it has to call | ||
| 40 | * v4l2_m2m_job_finish() (as if the transaction ended normally). | ||
| 41 | * This function does not have to (and will usually not) wait | ||
| 42 | * until the device enters a state when it can be stopped. | ||
| 43 | */ | ||
| 44 | struct v4l2_m2m_ops { | ||
| 45 | void (*device_run)(void *priv); | ||
| 46 | int (*job_ready)(void *priv); | ||
| 47 | void (*job_abort)(void *priv); | ||
| 48 | }; | ||
| 49 | |||
| 50 | struct v4l2_m2m_dev; | ||
| 51 | |||
| 52 | struct v4l2_m2m_queue_ctx { | ||
| 53 | /* private: internal use only */ | ||
| 54 | struct videobuf_queue q; | ||
| 55 | |||
| 56 | /* Queue for buffers ready to be processed as soon as this | ||
| 57 | * instance receives access to the device */ | ||
| 58 | struct list_head rdy_queue; | ||
| 59 | u8 num_rdy; | ||
| 60 | }; | ||
| 61 | |||
| 62 | struct v4l2_m2m_ctx { | ||
| 63 | /* private: internal use only */ | ||
| 64 | struct v4l2_m2m_dev *m2m_dev; | ||
| 65 | |||
| 66 | /* Capture (output to memory) queue context */ | ||
| 67 | struct v4l2_m2m_queue_ctx cap_q_ctx; | ||
| 68 | |||
| 69 | /* Output (input from memory) queue context */ | ||
| 70 | struct v4l2_m2m_queue_ctx out_q_ctx; | ||
| 71 | |||
| 72 | /* For device job queue */ | ||
| 73 | struct list_head queue; | ||
| 74 | unsigned long job_flags; | ||
| 75 | |||
| 76 | /* Instance private data */ | ||
| 77 | void *priv; | ||
| 78 | }; | ||
| 79 | |||
| 80 | void *v4l2_m2m_get_curr_priv(struct v4l2_m2m_dev *m2m_dev); | ||
| 81 | |||
| 82 | struct videobuf_queue *v4l2_m2m_get_vq(struct v4l2_m2m_ctx *m2m_ctx, | ||
| 83 | enum v4l2_buf_type type); | ||
| 84 | |||
| 85 | void v4l2_m2m_job_finish(struct v4l2_m2m_dev *m2m_dev, | ||
| 86 | struct v4l2_m2m_ctx *m2m_ctx); | ||
| 87 | |||
| 88 | int v4l2_m2m_reqbufs(struct file *file, struct v4l2_m2m_ctx *m2m_ctx, | ||
| 89 | struct v4l2_requestbuffers *reqbufs); | ||
| 90 | |||
| 91 | int v4l2_m2m_querybuf(struct file *file, struct v4l2_m2m_ctx *m2m_ctx, | ||
| 92 | struct v4l2_buffer *buf); | ||
| 93 | |||
| 94 | int v4l2_m2m_qbuf(struct file *file, struct v4l2_m2m_ctx *m2m_ctx, | ||
| 95 | struct v4l2_buffer *buf); | ||
| 96 | int v4l2_m2m_dqbuf(struct file *file, struct v4l2_m2m_ctx *m2m_ctx, | ||
| 97 | struct v4l2_buffer *buf); | ||
| 98 | |||
| 99 | int v4l2_m2m_streamon(struct file *file, struct v4l2_m2m_ctx *m2m_ctx, | ||
| 100 | enum v4l2_buf_type type); | ||
| 101 | int v4l2_m2m_streamoff(struct file *file, struct v4l2_m2m_ctx *m2m_ctx, | ||
| 102 | enum v4l2_buf_type type); | ||
| 103 | |||
| 104 | unsigned int v4l2_m2m_poll(struct file *file, struct v4l2_m2m_ctx *m2m_ctx, | ||
| 105 | struct poll_table_struct *wait); | ||
| 106 | |||
| 107 | int v4l2_m2m_mmap(struct file *file, struct v4l2_m2m_ctx *m2m_ctx, | ||
| 108 | struct vm_area_struct *vma); | ||
| 109 | |||
| 110 | struct v4l2_m2m_dev *v4l2_m2m_init(struct v4l2_m2m_ops *m2m_ops); | ||
| 111 | void v4l2_m2m_release(struct v4l2_m2m_dev *m2m_dev); | ||
| 112 | |||
| 113 | struct v4l2_m2m_ctx *v4l2_m2m_ctx_init(void *priv, struct v4l2_m2m_dev *m2m_dev, | ||
| 114 | void (*vq_init)(void *priv, struct videobuf_queue *, | ||
| 115 | enum v4l2_buf_type)); | ||
| 116 | void v4l2_m2m_ctx_release(struct v4l2_m2m_ctx *m2m_ctx); | ||
| 117 | |||
| 118 | void v4l2_m2m_buf_queue(struct v4l2_m2m_ctx *m2m_ctx, struct videobuf_queue *vq, | ||
| 119 | struct videobuf_buffer *vb); | ||
| 120 | |||
| 121 | /** | ||
| 122 | * v4l2_m2m_num_src_bufs_ready() - return the number of source buffers ready for | ||
| 123 | * use | ||
| 124 | */ | ||
| 125 | static inline | ||
| 126 | unsigned int v4l2_m2m_num_src_bufs_ready(struct v4l2_m2m_ctx *m2m_ctx) | ||
| 127 | { | ||
| 128 | return m2m_ctx->cap_q_ctx.num_rdy; | ||
| 129 | } | ||
| 130 | |||
| 131 | /** | ||
| 132 | * v4l2_m2m_num_src_bufs_ready() - return the number of destination buffers | ||
| 133 | * ready for use | ||
| 134 | */ | ||
| 135 | static inline | ||
| 136 | unsigned int v4l2_m2m_num_dst_bufs_ready(struct v4l2_m2m_ctx *m2m_ctx) | ||
| 137 | { | ||
| 138 | return m2m_ctx->out_q_ctx.num_rdy; | ||
| 139 | } | ||
| 140 | |||
| 141 | void *v4l2_m2m_next_buf(struct v4l2_m2m_ctx *m2m_ctx, enum v4l2_buf_type type); | ||
| 142 | |||
| 143 | /** | ||
| 144 | * v4l2_m2m_next_src_buf() - return next source buffer from the list of ready | ||
| 145 | * buffers | ||
| 146 | */ | ||
| 147 | static inline void *v4l2_m2m_next_src_buf(struct v4l2_m2m_ctx *m2m_ctx) | ||
| 148 | { | ||
| 149 | return v4l2_m2m_next_buf(m2m_ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT); | ||
| 150 | } | ||
| 151 | |||
| 152 | /** | ||
| 153 | * v4l2_m2m_next_dst_buf() - return next destination buffer from the list of | ||
| 154 | * ready buffers | ||
| 155 | */ | ||
| 156 | static inline void *v4l2_m2m_next_dst_buf(struct v4l2_m2m_ctx *m2m_ctx) | ||
| 157 | { | ||
| 158 | return v4l2_m2m_next_buf(m2m_ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE); | ||
| 159 | } | ||
| 160 | |||
| 161 | /** | ||
| 162 | * v4l2_m2m_get_src_vq() - return videobuf_queue for source buffers | ||
| 163 | */ | ||
| 164 | static inline | ||
| 165 | struct videobuf_queue *v4l2_m2m_get_src_vq(struct v4l2_m2m_ctx *m2m_ctx) | ||
| 166 | { | ||
| 167 | return v4l2_m2m_get_vq(m2m_ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT); | ||
| 168 | } | ||
| 169 | |||
| 170 | /** | ||
| 171 | * v4l2_m2m_get_dst_vq() - return videobuf_queue for destination buffers | ||
| 172 | */ | ||
| 173 | static inline | ||
| 174 | struct videobuf_queue *v4l2_m2m_get_dst_vq(struct v4l2_m2m_ctx *m2m_ctx) | ||
| 175 | { | ||
| 176 | return v4l2_m2m_get_vq(m2m_ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE); | ||
| 177 | } | ||
| 178 | |||
| 179 | void *v4l2_m2m_buf_remove(struct v4l2_m2m_ctx *m2m_ctx, | ||
| 180 | enum v4l2_buf_type type); | ||
| 181 | |||
| 182 | /** | ||
| 183 | * v4l2_m2m_src_buf_remove() - take off a source buffer from the list of ready | ||
| 184 | * buffers and return it | ||
| 185 | */ | ||
| 186 | static inline void *v4l2_m2m_src_buf_remove(struct v4l2_m2m_ctx *m2m_ctx) | ||
| 187 | { | ||
| 188 | return v4l2_m2m_buf_remove(m2m_ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT); | ||
| 189 | } | ||
| 190 | |||
| 191 | /** | ||
| 192 | * v4l2_m2m_dst_buf_remove() - take off a destination buffer from the list of | ||
| 193 | * ready buffers and return it | ||
| 194 | */ | ||
| 195 | static inline void *v4l2_m2m_dst_buf_remove(struct v4l2_m2m_ctx *m2m_ctx) | ||
| 196 | { | ||
| 197 | return v4l2_m2m_buf_remove(m2m_ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE); | ||
| 198 | } | ||
| 199 | |||
| 200 | #endif /* _MEDIA_V4L2_MEM2MEM_H */ | ||
| 201 | |||
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h index 2bcdca0a57fc..a88889355ae0 100644 --- a/include/media/v4l2-subdev.h +++ b/include/media/v4l2-subdev.h | |||
| @@ -184,28 +184,6 @@ struct v4l2_subdev_audio_ops { | |||
| 184 | }; | 184 | }; |
| 185 | 185 | ||
| 186 | /* | 186 | /* |
| 187 | decode_vbi_line: video decoders that support sliced VBI need to implement | ||
| 188 | this ioctl. Field p of the v4l2_sliced_vbi_line struct is set to the | ||
| 189 | start of the VBI data that was generated by the decoder. The driver | ||
| 190 | then parses the sliced VBI data and sets the other fields in the | ||
| 191 | struct accordingly. The pointer p is updated to point to the start of | ||
| 192 | the payload which can be copied verbatim into the data field of the | ||
| 193 | v4l2_sliced_vbi_data struct. If no valid VBI data was found, then the | ||
| 194 | type field is set to 0 on return. | ||
| 195 | |||
| 196 | s_vbi_data: used to generate VBI signals on a video signal. | ||
| 197 | v4l2_sliced_vbi_data is filled with the data packets that should be | ||
| 198 | output. Note that if you set the line field to 0, then that VBI signal | ||
| 199 | is disabled. If no valid VBI data was found, then the type field is | ||
| 200 | set to 0 on return. | ||
| 201 | |||
| 202 | g_vbi_data: used to obtain the sliced VBI packet from a readback register. | ||
| 203 | Not all video decoders support this. If no data is available because | ||
| 204 | the readback register contains invalid or erroneous data -EIO is | ||
| 205 | returned. Note that you must fill in the 'id' member and the 'field' | ||
| 206 | member (to determine whether CC data from the first or second field | ||
| 207 | should be obtained). | ||
| 208 | |||
| 209 | s_std_output: set v4l2_std_id for video OUTPUT devices. This is ignored by | 187 | s_std_output: set v4l2_std_id for video OUTPUT devices. This is ignored by |
| 210 | video input devices. | 188 | video input devices. |
| 211 | 189 | ||
| @@ -243,10 +221,6 @@ struct v4l2_subdev_audio_ops { | |||
| 243 | struct v4l2_subdev_video_ops { | 221 | struct v4l2_subdev_video_ops { |
| 244 | int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config); | 222 | int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config); |
| 245 | int (*s_crystal_freq)(struct v4l2_subdev *sd, u32 freq, u32 flags); | 223 | int (*s_crystal_freq)(struct v4l2_subdev *sd, u32 freq, u32 flags); |
| 246 | int (*decode_vbi_line)(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi_line); | ||
| 247 | int (*s_vbi_data)(struct v4l2_subdev *sd, const struct v4l2_sliced_vbi_data *vbi_data); | ||
| 248 | int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data); | ||
| 249 | int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap); | ||
| 250 | int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std); | 224 | int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std); |
| 251 | int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std); | 225 | int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std); |
| 252 | int (*g_input_status)(struct v4l2_subdev *sd, u32 *status); | 226 | int (*g_input_status)(struct v4l2_subdev *sd, u32 *status); |
| @@ -262,6 +236,8 @@ struct v4l2_subdev_video_ops { | |||
| 262 | int (*s_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param); | 236 | int (*s_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param); |
| 263 | int (*enum_framesizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum *fsize); | 237 | int (*enum_framesizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum *fsize); |
| 264 | int (*enum_frameintervals)(struct v4l2_subdev *sd, struct v4l2_frmivalenum *fival); | 238 | int (*enum_frameintervals)(struct v4l2_subdev *sd, struct v4l2_frmivalenum *fival); |
| 239 | int (*enum_dv_presets) (struct v4l2_subdev *sd, | ||
| 240 | struct v4l2_dv_enum_preset *preset); | ||
| 265 | int (*s_dv_preset)(struct v4l2_subdev *sd, | 241 | int (*s_dv_preset)(struct v4l2_subdev *sd, |
| 266 | struct v4l2_dv_preset *preset); | 242 | struct v4l2_dv_preset *preset); |
| 267 | int (*query_dv_preset)(struct v4l2_subdev *sd, | 243 | int (*query_dv_preset)(struct v4l2_subdev *sd, |
| @@ -280,6 +256,45 @@ struct v4l2_subdev_video_ops { | |||
| 280 | struct v4l2_mbus_framefmt *fmt); | 256 | struct v4l2_mbus_framefmt *fmt); |
| 281 | }; | 257 | }; |
| 282 | 258 | ||
| 259 | /* | ||
| 260 | decode_vbi_line: video decoders that support sliced VBI need to implement | ||
| 261 | this ioctl. Field p of the v4l2_sliced_vbi_line struct is set to the | ||
| 262 | start of the VBI data that was generated by the decoder. The driver | ||
| 263 | then parses the sliced VBI data and sets the other fields in the | ||
| 264 | struct accordingly. The pointer p is updated to point to the start of | ||
| 265 | the payload which can be copied verbatim into the data field of the | ||
| 266 | v4l2_sliced_vbi_data struct. If no valid VBI data was found, then the | ||
| 267 | type field is set to 0 on return. | ||
| 268 | |||
| 269 | s_vbi_data: used to generate VBI signals on a video signal. | ||
| 270 | v4l2_sliced_vbi_data is filled with the data packets that should be | ||
| 271 | output. Note that if you set the line field to 0, then that VBI signal | ||
| 272 | is disabled. If no valid VBI data was found, then the type field is | ||
| 273 | set to 0 on return. | ||
| 274 | |||
| 275 | g_vbi_data: used to obtain the sliced VBI packet from a readback register. | ||
| 276 | Not all video decoders support this. If no data is available because | ||
| 277 | the readback register contains invalid or erroneous data -EIO is | ||
| 278 | returned. Note that you must fill in the 'id' member and the 'field' | ||
| 279 | member (to determine whether CC data from the first or second field | ||
| 280 | should be obtained). | ||
| 281 | |||
| 282 | s_raw_fmt: setup the video encoder/decoder for raw VBI. | ||
| 283 | |||
| 284 | g_sliced_fmt: retrieve the current sliced VBI settings. | ||
| 285 | |||
| 286 | s_sliced_fmt: setup the sliced VBI settings. | ||
| 287 | */ | ||
| 288 | struct v4l2_subdev_vbi_ops { | ||
| 289 | int (*decode_vbi_line)(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi_line); | ||
| 290 | int (*s_vbi_data)(struct v4l2_subdev *sd, const struct v4l2_sliced_vbi_data *vbi_data); | ||
| 291 | int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data); | ||
| 292 | int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap); | ||
| 293 | int (*s_raw_fmt)(struct v4l2_subdev *sd, struct v4l2_vbi_format *fmt); | ||
| 294 | int (*g_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt); | ||
| 295 | int (*s_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt); | ||
| 296 | }; | ||
| 297 | |||
| 283 | /** | 298 | /** |
| 284 | * struct v4l2_subdev_sensor_ops - v4l2-subdev sensor operations | 299 | * struct v4l2_subdev_sensor_ops - v4l2-subdev sensor operations |
| 285 | * @g_skip_top_lines: number of lines at the top of the image to be skipped. | 300 | * @g_skip_top_lines: number of lines at the top of the image to be skipped. |
| @@ -379,6 +394,7 @@ struct v4l2_subdev_ops { | |||
| 379 | const struct v4l2_subdev_tuner_ops *tuner; | 394 | const struct v4l2_subdev_tuner_ops *tuner; |
| 380 | const struct v4l2_subdev_audio_ops *audio; | 395 | const struct v4l2_subdev_audio_ops *audio; |
| 381 | const struct v4l2_subdev_video_ops *video; | 396 | const struct v4l2_subdev_video_ops *video; |
| 397 | const struct v4l2_subdev_vbi_ops *vbi; | ||
| 382 | const struct v4l2_subdev_ir_ops *ir; | 398 | const struct v4l2_subdev_ir_ops *ir; |
| 383 | const struct v4l2_subdev_sensor_ops *sensor; | 399 | const struct v4l2_subdev_sensor_ops *sensor; |
| 384 | }; | 400 | }; |
| @@ -387,6 +403,8 @@ struct v4l2_subdev_ops { | |||
| 387 | 403 | ||
| 388 | /* Set this flag if this subdev is a i2c device. */ | 404 | /* Set this flag if this subdev is a i2c device. */ |
| 389 | #define V4L2_SUBDEV_FL_IS_I2C (1U << 0) | 405 | #define V4L2_SUBDEV_FL_IS_I2C (1U << 0) |
| 406 | /* Set this flag if this subdev is a spi device. */ | ||
| 407 | #define V4L2_SUBDEV_FL_IS_SPI (1U << 1) | ||
| 390 | 408 | ||
| 391 | /* Each instance of a subdev driver should create this struct, either | 409 | /* Each instance of a subdev driver should create this struct, either |
| 392 | stand-alone or embedded in a larger struct. | 410 | stand-alone or embedded in a larger struct. |
diff --git a/include/media/videobuf-core.h b/include/media/videobuf-core.h index 316fdccdcaa0..f91a736c133d 100644 --- a/include/media/videobuf-core.h +++ b/include/media/videobuf-core.h | |||
| @@ -127,30 +127,16 @@ struct videobuf_queue_ops { | |||
| 127 | struct videobuf_qtype_ops { | 127 | struct videobuf_qtype_ops { |
| 128 | u32 magic; | 128 | u32 magic; |
| 129 | 129 | ||
| 130 | void *(*alloc) (size_t size); | 130 | struct videobuf_buffer *(*alloc)(size_t size); |
| 131 | void *(*vmalloc) (struct videobuf_buffer *buf); | 131 | void *(*vaddr) (struct videobuf_buffer *buf); |
| 132 | int (*iolock) (struct videobuf_queue* q, | 132 | int (*iolock) (struct videobuf_queue *q, |
| 133 | struct videobuf_buffer *vb, | 133 | struct videobuf_buffer *vb, |
| 134 | struct v4l2_framebuffer *fbuf); | 134 | struct v4l2_framebuffer *fbuf); |
| 135 | int (*mmap) (struct videobuf_queue *q, | 135 | int (*sync) (struct videobuf_queue *q, |
| 136 | unsigned int *count, | ||
| 137 | unsigned int *size, | ||
| 138 | enum v4l2_memory memory); | ||
| 139 | int (*sync) (struct videobuf_queue* q, | ||
| 140 | struct videobuf_buffer *buf); | 136 | struct videobuf_buffer *buf); |
| 141 | int (*video_copy_to_user)(struct videobuf_queue *q, | ||
| 142 | char __user *data, | ||
| 143 | size_t count, | ||
| 144 | int nonblocking); | ||
| 145 | int (*copy_stream) (struct videobuf_queue *q, | ||
| 146 | char __user *data, | ||
| 147 | size_t count, | ||
| 148 | size_t pos, | ||
| 149 | int vbihack, | ||
| 150 | int nonblocking); | ||
| 151 | int (*mmap_free) (struct videobuf_queue *q); | ||
| 152 | int (*mmap_mapper) (struct videobuf_queue *q, | 137 | int (*mmap_mapper) (struct videobuf_queue *q, |
| 153 | struct vm_area_struct *vma); | 138 | struct videobuf_buffer *buf, |
| 139 | struct vm_area_struct *vma); | ||
| 154 | }; | 140 | }; |
| 155 | 141 | ||
| 156 | struct videobuf_queue { | 142 | struct videobuf_queue { |
| @@ -171,7 +157,6 @@ struct videobuf_queue { | |||
| 171 | 157 | ||
| 172 | unsigned int streaming:1; | 158 | unsigned int streaming:1; |
| 173 | unsigned int reading:1; | 159 | unsigned int reading:1; |
| 174 | unsigned int is_mmapped:1; | ||
| 175 | 160 | ||
| 176 | /* capture via mmap() + ioctl(QBUF/DQBUF) */ | 161 | /* capture via mmap() + ioctl(QBUF/DQBUF) */ |
| 177 | struct list_head stream; | 162 | struct list_head stream; |
| @@ -185,14 +170,14 @@ struct videobuf_queue { | |||
| 185 | }; | 170 | }; |
| 186 | 171 | ||
| 187 | int videobuf_waiton(struct videobuf_buffer *vb, int non_blocking, int intr); | 172 | int videobuf_waiton(struct videobuf_buffer *vb, int non_blocking, int intr); |
| 188 | int videobuf_iolock(struct videobuf_queue* q, struct videobuf_buffer *vb, | 173 | int videobuf_iolock(struct videobuf_queue *q, struct videobuf_buffer *vb, |
| 189 | struct v4l2_framebuffer *fbuf); | 174 | struct v4l2_framebuffer *fbuf); |
| 190 | 175 | ||
| 191 | void *videobuf_alloc(struct videobuf_queue* q); | 176 | struct videobuf_buffer *videobuf_alloc(struct videobuf_queue *q); |
| 192 | 177 | ||
| 193 | /* Used on videobuf-dvb */ | 178 | /* Used on videobuf-dvb */ |
| 194 | void *videobuf_queue_to_vmalloc (struct videobuf_queue* q, | 179 | void *videobuf_queue_to_vaddr(struct videobuf_queue *q, |
| 195 | struct videobuf_buffer *buf); | 180 | struct videobuf_buffer *buf); |
| 196 | 181 | ||
| 197 | void videobuf_queue_core_init(struct videobuf_queue *q, | 182 | void videobuf_queue_core_init(struct videobuf_queue *q, |
| 198 | const struct videobuf_queue_ops *ops, | 183 | const struct videobuf_queue_ops *ops, |
diff --git a/include/media/videobuf-dma-sg.h b/include/media/videobuf-dma-sg.h index 53e72f787175..a195f3b9c00a 100644 --- a/include/media/videobuf-dma-sg.h +++ b/include/media/videobuf-dma-sg.h | |||
| @@ -17,6 +17,8 @@ | |||
| 17 | * it under the terms of the GNU General Public License as published by | 17 | * it under the terms of the GNU General Public License as published by |
| 18 | * the Free Software Foundation; either version 2 | 18 | * the Free Software Foundation; either version 2 |
| 19 | */ | 19 | */ |
| 20 | #ifndef _VIDEOBUF_DMA_SG_H | ||
| 21 | #define _VIDEOBUF_DMA_SG_H | ||
| 20 | 22 | ||
| 21 | #include <media/videobuf-core.h> | 23 | #include <media/videobuf-core.h> |
| 22 | 24 | ||
| @@ -27,14 +29,14 @@ | |||
| 27 | * block (NULL on errors). Memory for the scatterlist is allocated | 29 | * block (NULL on errors). Memory for the scatterlist is allocated |
| 28 | * using kmalloc. The caller must free the memory. | 30 | * using kmalloc. The caller must free the memory. |
| 29 | */ | 31 | */ |
| 30 | struct scatterlist* videobuf_vmalloc_to_sg(unsigned char *virt, int nr_pages); | 32 | struct scatterlist *videobuf_vmalloc_to_sg(unsigned char *virt, int nr_pages); |
| 31 | 33 | ||
| 32 | /* | 34 | /* |
| 33 | * Return a scatterlist for a an array of userpages (NULL on errors). | 35 | * Return a scatterlist for a an array of userpages (NULL on errors). |
| 34 | * Memory for the scatterlist is allocated using kmalloc. The caller | 36 | * Memory for the scatterlist is allocated using kmalloc. The caller |
| 35 | * must free the memory. | 37 | * must free the memory. |
| 36 | */ | 38 | */ |
| 37 | struct scatterlist* videobuf_pages_to_sg(struct page **pages, int nr_pages, | 39 | struct scatterlist *videobuf_pages_to_sg(struct page **pages, int nr_pages, |
| 38 | int offset); | 40 | int offset); |
| 39 | 41 | ||
| 40 | /* --------------------------------------------------------------------- */ | 42 | /* --------------------------------------------------------------------- */ |
| @@ -78,8 +80,7 @@ struct videobuf_dmabuf { | |||
| 78 | int direction; | 80 | int direction; |
| 79 | }; | 81 | }; |
| 80 | 82 | ||
| 81 | struct videobuf_dma_sg_memory | 83 | struct videobuf_dma_sg_memory { |
| 82 | { | ||
| 83 | u32 magic; | 84 | u32 magic; |
| 84 | 85 | ||
| 85 | /* for mmap'ed buffers */ | 86 | /* for mmap'ed buffers */ |
| @@ -95,14 +96,13 @@ int videobuf_dma_init_overlay(struct videobuf_dmabuf *dma, int direction, | |||
| 95 | dma_addr_t addr, int nr_pages); | 96 | dma_addr_t addr, int nr_pages); |
| 96 | int videobuf_dma_free(struct videobuf_dmabuf *dma); | 97 | int videobuf_dma_free(struct videobuf_dmabuf *dma); |
| 97 | 98 | ||
| 98 | int videobuf_dma_map(struct videobuf_queue* q,struct videobuf_dmabuf *dma); | 99 | int videobuf_dma_map(struct videobuf_queue *q, struct videobuf_dmabuf *dma); |
| 99 | int videobuf_dma_sync(struct videobuf_queue* q,struct videobuf_dmabuf *dma); | 100 | int videobuf_dma_unmap(struct videobuf_queue *q, struct videobuf_dmabuf *dma); |
| 100 | int videobuf_dma_unmap(struct videobuf_queue* q,struct videobuf_dmabuf *dma); | 101 | struct videobuf_dmabuf *videobuf_to_dma(struct videobuf_buffer *buf); |
| 101 | struct videobuf_dmabuf *videobuf_to_dma (struct videobuf_buffer *buf); | ||
| 102 | 102 | ||
| 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 | const 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, |
| @@ -111,9 +111,11 @@ void videobuf_queue_sg_init(struct videobuf_queue* q, | |||
| 111 | unsigned int msize, | 111 | unsigned int msize, |
| 112 | void *priv); | 112 | void *priv); |
| 113 | 113 | ||
| 114 | /*FIXME: these variants are used only on *-alsa code, where videobuf is | 114 | /*FIXME: these variants are used only on *-alsa code, where videobuf is |
| 115 | * used without queue | 115 | * used without queue |
| 116 | */ | 116 | */ |
| 117 | int videobuf_sg_dma_map(struct device *dev, struct videobuf_dmabuf *dma); | 117 | int videobuf_sg_dma_map(struct device *dev, struct videobuf_dmabuf *dma); |
| 118 | int videobuf_sg_dma_unmap(struct device *dev, struct videobuf_dmabuf *dma); | 118 | int videobuf_sg_dma_unmap(struct device *dev, struct videobuf_dmabuf *dma); |
| 119 | 119 | ||
| 120 | #endif /* _VIDEOBUF_DMA_SG_H */ | ||
| 121 | |||
diff --git a/include/media/videobuf-vmalloc.h b/include/media/videobuf-vmalloc.h index 4b419a257a7d..851eb1a2ff2a 100644 --- a/include/media/videobuf-vmalloc.h +++ b/include/media/videobuf-vmalloc.h | |||
| @@ -19,17 +19,17 @@ | |||
| 19 | 19 | ||
| 20 | /* --------------------------------------------------------------------- */ | 20 | /* --------------------------------------------------------------------- */ |
| 21 | 21 | ||
| 22 | struct videobuf_vmalloc_memory | 22 | struct videobuf_vmalloc_memory { |
| 23 | { | ||
| 24 | u32 magic; | 23 | u32 magic; |
| 25 | 24 | ||
| 26 | void *vmalloc; | 25 | void *vmalloc; |
| 27 | 26 | ||
| 28 | /* remap_vmalloc_range seems to need to run after mmap() on some cases */ | 27 | /* remap_vmalloc_range seems to need to run |
| 28 | * after mmap() on some cases */ | ||
| 29 | struct vm_area_struct *vma; | 29 | struct vm_area_struct *vma; |
| 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 | const struct videobuf_queue_ops *ops, | 33 | const struct videobuf_queue_ops *ops, |
| 34 | struct device *dev, | 34 | struct device *dev, |
| 35 | spinlock_t *irqlock, | 35 | spinlock_t *irqlock, |
| @@ -38,8 +38,8 @@ void videobuf_queue_vmalloc_init(struct videobuf_queue* q, | |||
| 38 | unsigned int msize, | 38 | unsigned int msize, |
| 39 | void *priv); | 39 | void *priv); |
| 40 | 40 | ||
| 41 | void *videobuf_to_vmalloc (struct videobuf_buffer *buf); | 41 | void *videobuf_to_vmalloc(struct videobuf_buffer *buf); |
| 42 | 42 | ||
| 43 | void videobuf_vmalloc_free (struct videobuf_buffer *buf); | 43 | void videobuf_vmalloc_free(struct videobuf_buffer *buf); |
| 44 | 44 | ||
| 45 | #endif | 45 | #endif |
