1 /* SPDX-License-Identifier: GPL-2.0-or-later * << 2 /* 1 /* 3 * v4l2-mc.h - Media Controller V4L2 types and 2 * v4l2-mc.h - Media Controller V4L2 types and prototypes 4 * 3 * 5 * Copyright (C) 2016 Mauro Carvalho Chehab <m 4 * Copyright (C) 2016 Mauro Carvalho Chehab <mchehab@kernel.org> 6 * Copyright (C) 2006-2010 Nokia Corporation 5 * Copyright (C) 2006-2010 Nokia Corporation 7 * Copyright (c) 2016 Intel Corporation. 6 * Copyright (c) 2016 Intel Corporation. >> 7 * >> 8 * This program is free software; you can redistribute it and/or modify >> 9 * it under the terms of the GNU General Public License as published by >> 10 * the Free Software Foundation; either version 2 of the License, or >> 11 * (at your option) any later version. >> 12 * >> 13 * This program is distributed in the hope that it will be useful, >> 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of >> 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> 16 * GNU General Public License for more details. 8 */ 17 */ 9 18 10 #ifndef _V4L2_MC_H 19 #ifndef _V4L2_MC_H 11 #define _V4L2_MC_H 20 #define _V4L2_MC_H 12 21 13 #include <media/media-device.h> 22 #include <media/media-device.h> 14 #include <media/v4l2-dev.h> 23 #include <media/v4l2-dev.h> 15 #include <media/v4l2-subdev.h> << 16 #include <linux/types.h> 24 #include <linux/types.h> 17 25 >> 26 /** >> 27 * enum tuner_pad_index - tuner pad index for MEDIA_ENT_F_TUNER >> 28 * >> 29 * @TUNER_PAD_RF_INPUT: Radiofrequency (RF) sink pad, usually linked to a >> 30 * RF connector entity. >> 31 * @TUNER_PAD_OUTPUT: Tuner video output source pad. Contains the video >> 32 * chrominance and luminance or the hole bandwidth >> 33 * of the signal converted to an Intermediate Frequency >> 34 * (IF) or to baseband (on zero-IF tuners). >> 35 * @TUNER_PAD_AUD_OUT: Tuner audio output source pad. Tuners used to decode >> 36 * analog TV signals have an extra pad for audio output. >> 37 * Old tuners use an analog stage with a saw filter for >> 38 * the audio IF frequency. The output of the pad is, in >> 39 * this case, the audio IF, with should be decoded either >> 40 * by the bridge chipset (that's the case of cx2388x >> 41 * chipsets) or may require an external IF sound >> 42 * processor, like msp34xx. On modern silicon tuners, >> 43 * the audio IF decoder is usually incorporated at the >> 44 * tuner. On such case, the output of this pad is an >> 45 * audio sampled data. >> 46 * @TUNER_NUM_PADS: Number of pads of the tuner. >> 47 */ >> 48 enum tuner_pad_index { >> 49 TUNER_PAD_RF_INPUT, >> 50 TUNER_PAD_OUTPUT, >> 51 TUNER_PAD_AUD_OUT, >> 52 TUNER_NUM_PADS >> 53 }; >> 54 >> 55 /** >> 56 * enum if_vid_dec_pad_index - video IF-PLL pad index for >> 57 * MEDIA_ENT_F_IF_VID_DECODER >> 58 * >> 59 * @IF_VID_DEC_PAD_IF_INPUT: video Intermediate Frequency (IF) sink pad >> 60 * @IF_VID_DEC_PAD_OUT: IF-PLL video output source pad. Contains the >> 61 * video chrominance and luminance IF signals. >> 62 * @IF_VID_DEC_PAD_NUM_PADS: Number of pads of the video IF-PLL. >> 63 */ >> 64 enum if_vid_dec_pad_index { >> 65 IF_VID_DEC_PAD_IF_INPUT, >> 66 IF_VID_DEC_PAD_OUT, >> 67 IF_VID_DEC_PAD_NUM_PADS >> 68 }; >> 69 >> 70 /** >> 71 * enum if_aud_dec_pad_index - audio/sound IF-PLL pad index for >> 72 * MEDIA_ENT_F_IF_AUD_DECODER >> 73 * >> 74 * @IF_AUD_DEC_PAD_IF_INPUT: audio Intermediate Frequency (IF) sink pad >> 75 * @IF_AUD_DEC_PAD_OUT: IF-PLL audio output source pad. Contains the >> 76 * audio sampled stream data, usually connected >> 77 * to the bridge bus via an Inter-IC Sound (I2S) >> 78 * bus. >> 79 * @IF_AUD_DEC_PAD_NUM_PADS: Number of pads of the audio IF-PLL. >> 80 */ >> 81 enum if_aud_dec_pad_index { >> 82 IF_AUD_DEC_PAD_IF_INPUT, >> 83 IF_AUD_DEC_PAD_OUT, >> 84 IF_AUD_DEC_PAD_NUM_PADS >> 85 }; >> 86 >> 87 /** >> 88 * enum demod_pad_index - analog TV pad index for MEDIA_ENT_F_ATV_DECODER >> 89 * >> 90 * @DEMOD_PAD_IF_INPUT: IF input sink pad. >> 91 * @DEMOD_PAD_VID_OUT: Video output source pad. >> 92 * @DEMOD_PAD_VBI_OUT: Vertical Blank Interface (VBI) output source pad. >> 93 * @DEMOD_PAD_AUDIO_OUT: Audio output source pad. >> 94 * @DEMOD_NUM_PADS: Maximum number of output pads. >> 95 */ >> 96 enum demod_pad_index { >> 97 DEMOD_PAD_IF_INPUT, >> 98 DEMOD_PAD_VID_OUT, >> 99 DEMOD_PAD_VBI_OUT, >> 100 DEMOD_PAD_AUDIO_OUT, >> 101 DEMOD_NUM_PADS >> 102 }; >> 103 18 /* We don't need to include pci.h or usb.h her 104 /* We don't need to include pci.h or usb.h here */ 19 struct pci_dev; 105 struct pci_dev; 20 struct usb_device; 106 struct usb_device; 21 107 22 #ifdef CONFIG_MEDIA_CONTROLLER 108 #ifdef CONFIG_MEDIA_CONTROLLER 23 /** 109 /** 24 * v4l2_mc_create_media_graph() - create Media 110 * v4l2_mc_create_media_graph() - create Media Controller links at the graph. 25 * 111 * 26 * @mdev: pointer to the &media_device s 112 * @mdev: pointer to the &media_device struct. 27 * 113 * 28 * Add links between the entities commonly fou 114 * Add links between the entities commonly found on PC customer's hardware at 29 * the V4L2 side: camera sensors, audio and vi 115 * the V4L2 side: camera sensors, audio and video PLL-IF decoders, tuners, 30 * analog TV decoder and I/O entities (video, 116 * analog TV decoder and I/O entities (video, VBI and Software Defined Radio). 31 * 117 * 32 * .. note:: 118 * .. note:: 33 * 119 * 34 * Webcams are modelled on a very simple wa 120 * Webcams are modelled on a very simple way: the sensor is 35 * connected directly to the I/O entity. Al 121 * connected directly to the I/O entity. All dirty details, like 36 * scaler and crop HW are hidden. While suc 122 * scaler and crop HW are hidden. While such mapping is enough for v4l2 37 * interface centric PC-consumer's hardware 123 * interface centric PC-consumer's hardware, V4L2 subdev centric camera 38 * hardware should not use this routine, as 124 * hardware should not use this routine, as it will not build the right graph. 39 */ 125 */ 40 int v4l2_mc_create_media_graph(struct media_de 126 int v4l2_mc_create_media_graph(struct media_device *mdev); 41 127 42 /** 128 /** 43 * v4l_enable_media_source() - Hold media sou 129 * v4l_enable_media_source() - Hold media source for exclusive use 44 * if free 130 * if free 45 * 131 * 46 * @vdev: pointer to struct video_device 132 * @vdev: pointer to struct video_device 47 * 133 * 48 * This interface calls enable_source handler 134 * This interface calls enable_source handler to determine if 49 * media source is free for use. The enable_so 135 * media source is free for use. The enable_source handler is 50 * responsible for checking is the media sourc 136 * responsible for checking is the media source is free and 51 * start a pipeline between the media source a 137 * start a pipeline between the media source and the media 52 * entity associated with the video device. Th 138 * entity associated with the video device. This interface 53 * should be called from v4l2-core and dvb-cor 139 * should be called from v4l2-core and dvb-core interfaces 54 * that change the source configuration. 140 * that change the source configuration. 55 * 141 * 56 * Return: returns zero on success or a negati 142 * Return: returns zero on success or a negative error code. 57 */ 143 */ 58 int v4l_enable_media_source(struct video_devic 144 int v4l_enable_media_source(struct video_device *vdev); 59 145 60 /** 146 /** 61 * v4l_disable_media_source() - Release media 147 * v4l_disable_media_source() - Release media source 62 * 148 * 63 * @vdev: pointer to struct video_device 149 * @vdev: pointer to struct video_device 64 * 150 * 65 * This interface calls disable_source handler 151 * This interface calls disable_source handler to release 66 * the media source. The disable_source handle 152 * the media source. The disable_source handler stops the 67 * active media pipeline between the media sou 153 * active media pipeline between the media source and the 68 * media entity associated with the video devi 154 * media entity associated with the video device. 69 * 155 * 70 * Return: returns zero on success or a negati 156 * Return: returns zero on success or a negative error code. 71 */ 157 */ 72 void v4l_disable_media_source(struct video_dev 158 void v4l_disable_media_source(struct video_device *vdev); 73 159 74 /* 160 /* 75 * v4l_vb2q_enable_media_tuner - Hold media s 161 * v4l_vb2q_enable_media_tuner - Hold media source for exclusive use 76 * if free. 162 * if free. 77 * @q - pointer to struct vb2_queue 163 * @q - pointer to struct vb2_queue 78 * 164 * 79 * Wrapper for v4l_enable_media_source(). This 165 * Wrapper for v4l_enable_media_source(). This function should 80 * be called from v4l2-core to enable the medi 166 * be called from v4l2-core to enable the media source with 81 * pointer to struct vb2_queue as the input ar 167 * pointer to struct vb2_queue as the input argument. Some 82 * v4l2-core interfaces don't have access to v 168 * v4l2-core interfaces don't have access to video device and 83 * this interface finds the struct video_devic 169 * this interface finds the struct video_device for the q and 84 * calls v4l_enable_media_source(). 170 * calls v4l_enable_media_source(). 85 */ 171 */ 86 int v4l_vb2q_enable_media_source(struct vb2_qu 172 int v4l_vb2q_enable_media_source(struct vb2_queue *q); 87 173 88 /** << 89 * v4l2_create_fwnode_links_to_pad - Create fw << 90 * source su << 91 * << 92 * @src_sd: pointer to a source subdev << 93 * @sink: pointer to a sink pad << 94 * @flags: the link flags << 95 * << 96 * This function searches for fwnode endpoint << 97 * subdevice to a single sink pad, and if suit << 98 * translates them into media links to that pa << 99 * called by the sink, in its v4l2-async notif << 100 * links from a bound source subdevice. << 101 * << 102 * The @flags argument specifies the link flag << 103 * the flags are valid regardless of the numbe << 104 * For instance, setting the MEDIA_LNK_FL_ENAB << 105 * links to be enabled, which isn't valid if m << 106 * << 107 * .. note:: << 108 * << 109 * Any sink subdevice that calls this funct << 110 * .get_fwnode_pad media operation in order << 111 * to the sink are owned by the sink. << 112 * << 113 * Return 0 on success or a negative error cod << 114 */ << 115 int v4l2_create_fwnode_links_to_pad(struct v4l << 116 struct med << 117 174 118 /** 175 /** 119 * v4l2_create_fwnode_links - Create fwnode-ba !! 176 * v4l2_pipeline_pm_use - Update the use count of an entity 120 * subdev to a sink !! 177 * @entity: The entity 121 * !! 178 * @use: Use (1) or stop using (0) the entity 122 * @src_sd: pointer to a source subdevice !! 179 * 123 * @sink_sd: pointer to a sink subdevice !! 180 * Update the use count of all entities in the pipeline and power entities on or 124 * !! 181 * off accordingly. 125 * This function searches for any and all fwno !! 182 * 126 * between source and sink subdevices, and tra !! 183 * This function is intended to be called in video node open (use == 127 * links. The function can be called by the si !! 184 * 1) and release (use == 0). It uses struct media_entity.use_count to 128 * v4l2-async notifier subdev bound callback, !! 185 * track the power status. The use of this function should be paired 129 * a bound source subdevice. !! 186 * with v4l2_pipeline_link_notify(). 130 * << 131 * .. note:: << 132 * << 133 * Any sink subdevice that calls this funct << 134 * .get_fwnode_pad media operation in order << 135 * to the sink are owned by the sink. << 136 * 187 * 137 * Return 0 on success or a negative error cod !! 188 * Return 0 on success or a negative error code on failure. Powering entities 138 */ !! 189 * off is assumed to never fail. No failure can occur when the use parameter is 139 int v4l2_create_fwnode_links(struct v4l2_subde !! 190 * set to 0. 140 struct v4l2_subde << 141 << 142 /** << 143 * v4l2_pipeline_pm_get - Increase the use cou << 144 * @entity: The root entity of a pipeline << 145 * << 146 * THIS FUNCTION IS DEPRECATED. DO NOT USE IN << 147 * ON SUB-DEVICE DRIVERS INSTEAD. << 148 * << 149 * Update the use count of all entities in the << 150 * << 151 * This function is intended to be called in v << 152 * struct media_entity.use_count to track the << 153 * of this function should be paired with v4l2 << 154 * << 155 * Return 0 on success or a negative error cod << 156 */ << 157 int v4l2_pipeline_pm_get(struct media_entity * << 158 << 159 /** << 160 * v4l2_pipeline_pm_put - Decrease the use cou << 161 * @entity: The root entity of a pipeline << 162 * << 163 * THIS FUNCTION IS DEPRECATED. DO NOT USE IN << 164 * ON SUB-DEVICE DRIVERS INSTEAD. << 165 * << 166 * Update the use count of all entities in the << 167 * << 168 * This function is intended to be called in v << 169 * struct media_entity.use_count to track the << 170 * of this function should be paired with v4l2 << 171 */ 191 */ 172 void v4l2_pipeline_pm_put(struct media_entity !! 192 int v4l2_pipeline_pm_use(struct media_entity *entity, int use); 173 193 174 194 175 /** 195 /** 176 * v4l2_pipeline_link_notify - Link management 196 * v4l2_pipeline_link_notify - Link management notification callback 177 * @link: The link 197 * @link: The link 178 * @flags: New link flags that will be applied 198 * @flags: New link flags that will be applied 179 * @notification: The link's state change noti 199 * @notification: The link's state change notification type (MEDIA_DEV_NOTIFY_*) 180 * 200 * 181 * React to link management on powered pipelin 201 * React to link management on powered pipelines by updating the use count of 182 * all entities in the source and sink sides o 202 * all entities in the source and sink sides of the link. Entities are powered 183 * on or off accordingly. The use of this func 203 * on or off accordingly. The use of this function should be paired 184 * with v4l2_pipeline_pm_{get,put}(). !! 204 * with v4l2_pipeline_pm_use(). 185 * 205 * 186 * Return 0 on success or a negative error cod 206 * Return 0 on success or a negative error code on failure. Powering entities 187 * off is assumed to never fail. This function 207 * off is assumed to never fail. This function will not fail for disconnection 188 * events. 208 * events. 189 */ 209 */ 190 int v4l2_pipeline_link_notify(struct media_lin 210 int v4l2_pipeline_link_notify(struct media_link *link, u32 flags, 191 unsigned int not 211 unsigned int notification); 192 212 193 #else /* CONFIG_MEDIA_CONTROLLER */ 213 #else /* CONFIG_MEDIA_CONTROLLER */ 194 214 195 static inline int v4l2_mc_create_media_graph(s 215 static inline int v4l2_mc_create_media_graph(struct media_device *mdev) 196 { 216 { 197 return 0; 217 return 0; 198 } 218 } 199 219 200 static inline int v4l_enable_media_source(stru 220 static inline int v4l_enable_media_source(struct video_device *vdev) 201 { 221 { 202 return 0; 222 return 0; 203 } 223 } 204 224 205 static inline void v4l_disable_media_source(st 225 static inline void v4l_disable_media_source(struct video_device *vdev) 206 { 226 { 207 } 227 } 208 228 209 static inline int v4l_vb2q_enable_media_source 229 static inline int v4l_vb2q_enable_media_source(struct vb2_queue *q) 210 { 230 { 211 return 0; 231 return 0; 212 } 232 } 213 233 214 static inline int v4l2_pipeline_pm_get(struct !! 234 static inline int v4l2_pipeline_pm_use(struct media_entity *entity, int use) 215 { 235 { 216 return 0; 236 return 0; 217 } 237 } 218 << 219 static inline void v4l2_pipeline_pm_put(struct << 220 {} << 221 238 222 static inline int v4l2_pipeline_link_notify(st 239 static inline int v4l2_pipeline_link_notify(struct media_link *link, u32 flags, 223 un 240 unsigned int notification) 224 { 241 { 225 return 0; 242 return 0; 226 } 243 } 227 244 228 #endif /* CONFIG_MEDIA_CONTROLLER */ 245 #endif /* CONFIG_MEDIA_CONTROLLER */ 229 #endif /* _V4L2_MC_H */ 246 #endif /* _V4L2_MC_H */ 230 247
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.