diff options
author | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-07-27 15:45:04 +0200 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-07-27 15:45:04 +0200 |
commit | 85538b1ad145c67198cb55d02de14ba269cc323d (patch) | |
tree | 409fca93b357839b8c89b7099f2888c087694b64 /drivers/media | |
parent | Merge tag 'media/v4.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mch... (diff) | |
parent | [media] cx23885-cardlist.rst: add a new card (diff) | |
download | linux-85538b1ad145c67198cb55d02de14ba269cc323d.tar.xz linux-85538b1ad145c67198cb55d02de14ba269cc323d.zip |
Merge branch 'topic/docs-next' into v4l_for_linus
* topic/docs-next: (322 commits)
[media] cx23885-cardlist.rst: add a new card
[media] doc-rst: add some needed escape codes
[media] doc-rst: kapi: use :c:func: instead of :cpp:func
doc-rst: kernel-doc: fix a change introduced by mistake
[media] v4l2-ioctl.h add debug info for struct v4l2_ioctl_ops
[media] dvb_ringbuffer.h: some documentation improvements
[media] v4l2-ctrls.h: fully document the header file
[media] doc-rst: Fix some typedef ugly warnings
[media] doc-rst: reorganize the kAPI v4l2 chapters
[media] rename v4l2-framework.rst to v4l2-intro.rst
[media] move V4L2 clocks to a separate .rst file
[media] v4l2-fh.rst: add cross references and markups
[media] v4l2-fh.rst: add fh contents from v4l2-framework.rst
[media] v4l2-fh.h: add documentation for it
[media] v4l2-event.rst: add cross-references and markups
[media] v4l2-event.h: document all functions
[media] v4l2-event.rst: add text from v4l2-framework.rst
[media] v4l2-framework.rst: remove videobuf quick chapter
[media] v4l2-dev: add cross-references and improve markup
[media] doc-rst: move v4l2-dev doc to a separate file
...
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/dvb-core/demux.h | 165 | ||||
-rw-r--r-- | drivers/media/dvb-core/dvb_frontend.h | 53 | ||||
-rw-r--r-- | drivers/media/dvb-core/dvb_math.h | 7 | ||||
-rw-r--r-- | drivers/media/dvb-core/dvb_ringbuffer.h | 15 | ||||
-rw-r--r-- | drivers/media/v4l2-core/v4l2-dev.c | 34 | ||||
-rw-r--r-- | drivers/media/v4l2-core/v4l2-subdev.c | 10 |
6 files changed, 85 insertions, 199 deletions
diff --git a/drivers/media/dvb-core/demux.h b/drivers/media/dvb-core/demux.h index 7f1dffef4353..4b4c1da20f4b 100644 --- a/drivers/media/dvb-core/demux.h +++ b/drivers/media/dvb-core/demux.h @@ -1,6 +1,10 @@ /* * demux.h * + * The Kernel Digital TV Demux kABI defines a driver-internal interface for + * registering low-level, hardware specific driver to a hardware independent + * demux layer. + * * Copyright (c) 2002 Convergence GmbH * * based on code: @@ -32,49 +36,6 @@ #include <linux/time.h> #include <linux/dvb/dmx.h> -/** - * DOC: Digital TV Demux - * - * The Kernel Digital TV Demux kABI defines a driver-internal interface for - * registering low-level, hardware specific driver to a hardware independent - * demux layer. It is only of interest for Digital TV device driver writers. - * The header file for this kABI is named demux.h and located in - * drivers/media/dvb-core. - * - * The demux kABI should be implemented for each demux in the system. It is - * used to select the TS source of a demux and to manage the demux resources. - * When the demux client allocates a resource via the demux kABI, it receives - * a pointer to the kABI of that resource. - * - * Each demux receives its TS input from a DVB front-end or from memory, as - * set via this demux kABI. In a system with more than one front-end, the kABI - * can be used to select one of the DVB front-ends as a TS source for a demux, - * unless this is fixed in the HW platform. - * - * The demux kABI only controls front-ends regarding to their connections with - * demuxes; the kABI used to set the other front-end parameters, such as - * tuning, are devined via the Digital TV Frontend kABI. - * - * The functions that implement the abstract interface demux should be defined - * static or module private and registered to the Demux core for external - * access. It is not necessary to implement every function in the struct - * &dmx_demux. For example, a demux interface might support Section filtering, - * but not PES filtering. The kABI client is expected to check the value of any - * function pointer before calling the function: the value of NULL means - * that the function is not available. - * - * Whenever the functions of the demux API modify shared data, the - * possibilities of lost update and race condition problems should be - * addressed, e.g. by protecting parts of code with mutexes. - * - * Note that functions called from a bottom half context must not sleep. - * Even a simple memory allocation without using %GFP_ATOMIC can result in a - * kernel thread being put to sleep if swapping is needed. For example, the - * Linux Kernel calls the functions of a network device interface from a - * bottom half context. Thus, if a demux kABI function is called from network - * device code, the function must not sleep. - */ - /* * Common definitions */ @@ -104,7 +65,7 @@ */ /** - * enum ts_filter_type - filter type bitmap for dmx_ts_feed.set() + * enum ts_filter_type - filter type bitmap for dmx_ts_feed.set\(\) * * @TS_PACKET: Send TS packets (188 bytes) to callback (default). * @TS_PAYLOAD_ONLY: In case TS_PACKET is set, only send the TS payload @@ -231,30 +192,6 @@ struct dmx_section_feed { }; /** - * DOC: Demux Callback - * - * This kernel-space API comprises the callback functions that deliver filtered - * data to the demux client. Unlike the other DVB kABIs, these functions are - * provided by the client and called from the demux code. - * - * The function pointers of this abstract interface are not packed into a - * structure as in the other demux APIs, because the callback functions are - * registered and used independent of each other. As an example, it is possible - * for the API client to provide several callback functions for receiving TS - * packets and no callbacks for PES packets or sections. - * - * The functions that implement the callback API need not be re-entrant: when - * a demux driver calls one of these functions, the driver is not allowed to - * call the function again before the original call returns. If a callback is - * triggered by a hardware interrupt, it is recommended to use the Linux - * bottom half mechanism or start a tasklet instead of making the callback - * function call directly from a hardware interrupt. - * - * This mechanism is implemented by dmx_ts_cb() and dmx_section_cb() - * callbacks. - */ - -/** * typedef dmx_ts_cb - DVB demux TS filter callback function prototype * * @buffer1: Pointer to the start of the filtered TS packets. @@ -402,7 +339,7 @@ struct dmx_frontend { * @DMX_SECTION_FILTERING: set if section filtering is supported; * @DMX_MEMORY_BASED_FILTERING: set if write() available. * - * Those flags are OR'ed in the &dmx_demux.&capabilities field + * Those flags are OR'ed in the &dmx_demux.capabilities field */ enum dmx_demux_caps { DMX_TS_FILTERING = 1, @@ -442,10 +379,10 @@ enum dmx_demux_caps { * @open is called and decrement it when @close is called. * The @demux function parameter contains a pointer to the demux API and * instance data. - * It returns - * 0 on success; - * -EUSERS, if maximum usage count was reached; - * -EINVAL, on bad parameter. + * It returns: + * 0 on success; + * -EUSERS, if maximum usage count was reached; + * -EINVAL, on bad parameter. * * @close: This function reserves the demux for use by the caller and, if * necessary, initializes the demux. When the demux is no longer needed, @@ -455,10 +392,10 @@ enum dmx_demux_caps { * @open is called and decrement it when @close is called. * The @demux function parameter contains a pointer to the demux API and * instance data. - * It returns - * 0 on success; - * -ENODEV, if demux was not in use (e. g. no users); - * -EINVAL, on bad parameter. + * It returns: + * 0 on success; + * -ENODEV, if demux was not in use (e. g. no users); + * -EINVAL, on bad parameter. * * @write: This function provides the demux driver with a memory buffer * containing TS packets. Instead of receiving TS packets from the DVB @@ -473,12 +410,12 @@ enum dmx_demux_caps { * The @buf function parameter contains a pointer to the TS data in * kernel-space memory. * The @count function parameter contains the length of the TS data. - * It returns - * 0 on success; - * -ERESTARTSYS, if mutex lock was interrupted; - * -EINTR, if a signal handling is pending; - * -ENODEV, if demux was removed; - * -EINVAL, on bad parameter. + * It returns: + * 0 on success; + * -ERESTARTSYS, if mutex lock was interrupted; + * -EINTR, if a signal handling is pending; + * -ENODEV, if demux was removed; + * -EINVAL, on bad parameter. * * @allocate_ts_feed: Allocates a new TS feed, which is used to filter the TS * packets carrying a certain PID. The TS feed normally corresponds to a @@ -489,11 +426,11 @@ enum dmx_demux_caps { * instance data. * The @callback function parameter contains a pointer to the callback * function for passing received TS packet. - * It returns - * 0 on success; - * -ERESTARTSYS, if mutex lock was interrupted; - * -EBUSY, if no more TS feeds is available; - * -EINVAL, on bad parameter. + * It returns: + * 0 on success; + * -ERESTARTSYS, if mutex lock was interrupted; + * -EBUSY, if no more TS feeds is available; + * -EINVAL, on bad parameter. * * @release_ts_feed: Releases the resources allocated with @allocate_ts_feed. * Any filtering in progress on the TS feed should be stopped before @@ -502,9 +439,9 @@ enum dmx_demux_caps { * instance data. * The @feed function parameter contains a pointer to the TS feed API and * instance data. - * It returns - * 0 on success; - * -EINVAL on bad parameter. + * It returns: + * 0 on success; + * -EINVAL on bad parameter. * * @allocate_section_feed: Allocates a new section feed, i.e. a demux resource * for filtering and receiving sections. On platforms with hardware @@ -520,10 +457,10 @@ enum dmx_demux_caps { * instance data. * The @callback function parameter contains a pointer to the callback * function for passing received TS packet. - * It returns - * 0 on success; - * -EBUSY, if no more TS feeds is available; - * -EINVAL, on bad parameter. + * It returns: + * 0 on success; + * -EBUSY, if no more TS feeds is available; + * -EINVAL, on bad parameter. * * @release_section_feed: Releases the resources allocated with * @allocate_section_feed, including allocated filters. Any filtering in @@ -533,9 +470,9 @@ enum dmx_demux_caps { * instance data. * The @feed function parameter contains a pointer to the TS feed API and * instance data. - * It returns - * 0 on success; - * -EINVAL, on bad parameter. + * It returns: + * 0 on success; + * -EINVAL, on bad parameter. * * @add_frontend: Registers a connectivity between a demux and a front-end, * i.e., indicates that the demux can be connected via a call to @@ -549,9 +486,9 @@ enum dmx_demux_caps { * instance data. * The @frontend function parameter contains a pointer to the front-end * instance data. - * It returns - * 0 on success; - * -EINVAL, on bad parameter. + * It returns: + * 0 on success; + * -EINVAL, on bad parameter. * * @remove_frontend: Indicates that the given front-end, registered by a call * to @add_frontend, can no longer be connected as a TS source by this @@ -565,10 +502,10 @@ enum dmx_demux_caps { * instance data. * The @frontend function parameter contains a pointer to the front-end * instance data. - * It returns - * 0 on success; - * -ENODEV, if the front-end was not found, - * -EINVAL, on bad parameter. + * It returns: + * 0 on success; + * -ENODEV, if the front-end was not found, + * -EINVAL, on bad parameter. * * @get_frontends: Provides the APIs of the front-ends that have been * registered for this demux. Any of the front-ends obtained with this @@ -592,17 +529,17 @@ enum dmx_demux_caps { * instance data. * The @frontend function parameter contains a pointer to the front-end * instance data. - * It returns - * 0 on success; - * -EINVAL, on bad parameter. + * It returns: + * 0 on success; + * -EINVAL, on bad parameter. * * @disconnect_frontend: Disconnects the demux and a front-end previously * connected by a @connect_frontend call. * The @demux function parameter contains a pointer to the demux API and * instance data. - * It returns - * 0 on success; - * -EINVAL on bad parameter. + * It returns: + * 0 on success; + * -EINVAL on bad parameter. * * @get_pes_pids: Get the PIDs for DMX_PES_AUDIO0, DMX_PES_VIDEO0, * DMX_PES_TELETEXT0, DMX_PES_SUBTITLE0 and DMX_PES_PCR0. @@ -610,9 +547,9 @@ enum dmx_demux_caps { * instance data. * The @pids function parameter contains an array with five u16 elements * where the PIDs will be stored. - * It returns - * 0 on success; - * -EINVAL on bad parameter. + * It returns: + * 0 on success; + * -EINVAL on bad parameter. */ struct dmx_demux { diff --git a/drivers/media/dvb-core/dvb_frontend.h b/drivers/media/dvb-core/dvb_frontend.h index 9592573a0b41..fb6e84811504 100644 --- a/drivers/media/dvb-core/dvb_frontend.h +++ b/drivers/media/dvb-core/dvb_frontend.h @@ -1,6 +1,10 @@ /* * dvb_frontend.h * + * The Digital TV Frontend kABI defines a driver-internal interface for + * registering low-level, hardware specific driver to a hardware independent + * frontend layer. + * * Copyright (C) 2001 convergence integrated media GmbH * Copyright (C) 2004 convergence GmbH * @@ -42,29 +46,6 @@ #include "dvbdev.h" -/** - * DOC: Digital TV Frontend - * - * The Digital TV Frontend kABI defines a driver-internal interface for - * registering low-level, hardware specific driver to a hardware independent - * frontend layer. It is only of interest for Digital TV device driver writers. - * The header file for this API is named dvb_frontend.h and located in - * drivers/media/dvb-core. - * - * Before using the Digital TV frontend core, the bridge driver should attach - * the frontend demod, tuner and SEC devices and call dvb_register_frontend(), - * in order to register the new frontend at the subsystem. At device - * detach/removal, the bridge driver should call dvb_unregister_frontend() to - * remove the frontend from the core and then dvb_frontend_detach() to free the - * memory allocated by the frontend drivers. - * - * The drivers should also call dvb_frontend_suspend() as part of their - * handler for the &device_driver.suspend(), and dvb_frontend_resume() as - * part of their handler for &device_driver.resume(). - * - * A few other optional functions are provided to handle some special cases. - */ - /* * Maximum number of Delivery systems per frontend. It * should be smaller or equal to 32 @@ -406,7 +387,7 @@ struct dtv_frontend_properties; * FE_DISHNETWORK_SEND_LEGACY_CMD ioctl (only Satellite). * Drivers should not use this, except when the DVB * core emulation fails to provide proper support (e.g. - * if set_voltage() takes more than 8ms to work), and + * if @set_voltage takes more than 8ms to work), and * when backward compatibility with this legacy API is * required. * @i2c_gate_ctrl: controls the I2C gate. Newer drivers should use I2C @@ -741,13 +722,13 @@ void dvb_frontend_detach(struct dvb_frontend *fe); * This function prepares a Digital TV frontend to suspend. * * In order to prepare the tuner to suspend, if - * &dvb_frontend_ops.tuner_ops.suspend() is available, it calls it. Otherwise, - * it will call &dvb_frontend_ops.tuner_ops.sleep(), if available. + * &dvb_frontend_ops.tuner_ops.suspend\(\) is available, it calls it. Otherwise, + * it will call &dvb_frontend_ops.tuner_ops.sleep\(\), if available. * - * It will also call &dvb_frontend_ops.sleep() to put the demod to suspend. + * It will also call &dvb_frontend_ops.sleep\(\) to put the demod to suspend. * - * The drivers should also call dvb_frontend_suspend() as part of their - * handler for the &device_driver.suspend(). + * The drivers should also call dvb_frontend_suspend\(\) as part of their + * handler for the &device_driver.suspend\(\). */ int dvb_frontend_suspend(struct dvb_frontend *fe); @@ -758,17 +739,17 @@ int dvb_frontend_suspend(struct dvb_frontend *fe); * * This function resumes the usual operation of the tuner after resume. * - * In order to resume the frontend, it calls the demod &dvb_frontend_ops.init(). + * In order to resume the frontend, it calls the demod &dvb_frontend_ops.init\(\). * - * If &dvb_frontend_ops.tuner_ops.resume() is available, It, it calls it. - * Otherwise,t will call &dvb_frontend_ops.tuner_ops.init(), if available. + * If &dvb_frontend_ops.tuner_ops.resume\(\) is available, It, it calls it. + * Otherwise,t will call &dvb_frontend_ops.tuner_ops.init\(\), if available. * * Once tuner and demods are resumed, it will enforce that the SEC voltage and * tone are restored to their previous values and wake up the frontend's * kthread in order to retune the frontend. * * The drivers should also call dvb_frontend_resume() as part of their - * handler for the &device_driver.resume(). + * handler for the &device_driver.resume\(\). */ int dvb_frontend_resume(struct dvb_frontend *fe); @@ -777,7 +758,7 @@ int dvb_frontend_resume(struct dvb_frontend *fe); * * @fe: pointer to the frontend struct * - * Calls &dvb_frontend_ops.init() and &dvb_frontend_ops.tuner_ops.init(), + * Calls &dvb_frontend_ops.init\(\) and &dvb_frontend_ops.tuner_ops.init\(\), * and resets SEC tone and voltage (for Satellite systems). * * NOTE: Currently, this function is used only by one driver (budget-av). @@ -799,14 +780,14 @@ void dvb_frontend_reinitialise(struct dvb_frontend *fe); * satellite subsystem. * * Its used internally by the DVB frontend core, in order to emulate - * %FE_DISHNETWORK_SEND_LEGACY_CMD using the &dvb_frontend_ops.set_voltage() + * %FE_DISHNETWORK_SEND_LEGACY_CMD using the &dvb_frontend_ops.set_voltage\(\) * callback. * * NOTE: it should not be used at the drivers, as the emulation for the * legacy callback is provided by the Kernel. The only situation where this * should be at the drivers is when there are some bugs at the hardware that * would prevent the core emulation to work. On such cases, the driver would - * be writing a &dvb_frontend_ops.dishnetwork_send_legacy_command() and + * be writing a &dvb_frontend_ops.dishnetwork_send_legacy_command\(\) and * calling this function directly. */ void dvb_frontend_sleep_until(ktime_t *waketime, u32 add_usec); diff --git a/drivers/media/dvb-core/dvb_math.h b/drivers/media/dvb-core/dvb_math.h index 34dc1df03cab..2f0326674ca6 100644 --- a/drivers/media/dvb-core/dvb_math.h +++ b/drivers/media/dvb-core/dvb_math.h @@ -30,11 +30,15 @@ * @value: The value (must be != 0) * * to use rational values you can use the following method: + * * intlog2(value) = intlog2(value * 2^x) - x * 2^24 * * Some usecase examples: + * * intlog2(8) will give 3 << 24 = 3 * 2^24 + * * intlog2(9) will give 3 << 24 + ... = 3.16... * 2^24 + * * intlog2(1.5) = intlog2(3) - 2^24 = 0.584... * 2^24 * * @@ -48,10 +52,13 @@ extern unsigned int intlog2(u32 value); * @value: The value (must be != 0) * * to use rational values you can use the following method: + * * intlog10(value) = intlog10(value * 10^x) - x * 2^24 * * An usecase example: + * * intlog10(1000) will give 3 << 24 = 3 * 2^24 + * * due to the implementation intlog10(1000) might be not exactly 3 * 2^24 * * look at intlog2 for similar examples diff --git a/drivers/media/dvb-core/dvb_ringbuffer.h b/drivers/media/dvb-core/dvb_ringbuffer.h index 3ebc2d34b4a2..8af642399f1e 100644 --- a/drivers/media/dvb-core/dvb_ringbuffer.h +++ b/drivers/media/dvb-core/dvb_ringbuffer.h @@ -150,9 +150,6 @@ extern ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf, /** * dvb_ringbuffer_pkt_read_user - Read from a packet in the ringbuffer. - * Note: unlike dvb_ringbuffer_read(), this does NOT update the read pointer - * in the ringbuffer. You must use dvb_ringbuffer_pkt_dispose() to mark a - * packet as no longer required. * * @rbuf: Ringbuffer concerned. * @idx: Packet index as returned by dvb_ringbuffer_pkt_next(). @@ -161,9 +158,17 @@ extern ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf, * @len: Size of destination buffer. * * returns Number of bytes read, or -EFAULT. + * + * .. note:: + * + * unlike dvb_ringbuffer_read(), this does **NOT** update the read pointer + * in the ringbuffer. You must use dvb_ringbuffer_pkt_dispose() to mark a + * packet as no longer required. */ -extern ssize_t dvb_ringbuffer_pkt_read_user(struct dvb_ringbuffer *rbuf, size_t idx, - int offset, u8 __user *buf, size_t len); +extern ssize_t dvb_ringbuffer_pkt_read_user(struct dvb_ringbuffer *rbuf, + size_t idx, + int offset, u8 __user *buf, + size_t len); /** * dvb_ringbuffer_pkt_read - Read from a packet in the ringbuffer. diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c index 70b559d7ca80..e6da353b39bc 100644 --- a/drivers/media/v4l2-core/v4l2-dev.c +++ b/drivers/media/v4l2-core/v4l2-dev.c @@ -812,40 +812,6 @@ static int video_register_media_controller(struct video_device *vdev, int type) return 0; } -/** - * __video_register_device - register video4linux devices - * @vdev: video device structure we want to register - * @type: type of device to register - * @nr: which device node number (0 == /dev/video0, 1 == /dev/video1, ... - * -1 == first free) - * @warn_if_nr_in_use: warn if the desired device node number - * was already in use and another number was chosen instead. - * @owner: module that owns the video device node - * - * The registration code assigns minor numbers and device node numbers - * based on the requested type and registers the new device node with - * the kernel. - * - * This function assumes that struct video_device was zeroed when it - * was allocated and does not contain any stale date. - * - * An error is returned if no free minor or device node number could be - * found, or if the registration of the device node failed. - * - * Zero is returned on success. - * - * Valid types are - * - * %VFL_TYPE_GRABBER - A frame grabber - * - * %VFL_TYPE_VBI - Vertical blank data (undecoded) - * - * %VFL_TYPE_RADIO - A radio card - * - * %VFL_TYPE_SUBDEV - A subdevice - * - * %VFL_TYPE_SDR - Software Defined Radio - */ int __video_register_device(struct video_device *vdev, int type, int nr, int warn_if_nr_in_use, struct module *owner) { diff --git a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/media/v4l2-core/v4l2-subdev.c index 953eab08e420..34a1e7c8b306 100644 --- a/drivers/media/v4l2-core/v4l2-subdev.c +++ b/drivers/media/v4l2-core/v4l2-subdev.c @@ -621,16 +621,6 @@ void v4l2_subdev_init(struct v4l2_subdev *sd, const struct v4l2_subdev_ops *ops) } EXPORT_SYMBOL(v4l2_subdev_init); -/** - * v4l2_subdev_notify_event() - Delivers event notification for subdevice - * @sd: The subdev for which to deliver the event - * @ev: The event to deliver - * - * Will deliver the specified event to all userspace event listeners which are - * subscribed to the v42l subdev event queue as well as to the bridge driver - * using the notify callback. The notification type for the notify callback - * will be V4L2_DEVICE_NOTIFY_EVENT. - */ void v4l2_subdev_notify_event(struct v4l2_subdev *sd, const struct v4l2_event *ev) { |