1.22. V4L2 async kAPI¶
-
enum
v4l2_async_match_type¶ type of asynchronous subdevice logic to be used in order to identify a match
Constants
V4L2_ASYNC_MATCH_CUSTOMMatch will use the logic provided by
struct v4l2_async_subdev.match opsV4L2_ASYNC_MATCH_DEVNAMEMatch will use the device name
V4L2_ASYNC_MATCH_I2CMatch will check for I2C adapter ID and address
V4L2_ASYNC_MATCH_FWNODEMatch will use firmware node
Description
This enum is used by the asyncrhronous sub-device logic to define the algorithm that will be used to match an asynchronous device.
-
struct
v4l2_async_subdev¶ sub-device descriptor, as known to a bridge
Definition
struct v4l2_async_subdev {
enum v4l2_async_match_type match_type;
union {
struct fwnode_handle *fwnode;
const char *device_name;
struct {
int adapter_id;
unsigned short address;
} i2c;
struct {
bool (*match)(struct device *dev, struct v4l2_async_subdev *sd);
void *priv;
} custom;
} match;
struct list_head list;
struct list_head asd_list;
};
Members
match_typetype of match that will be used
matchunion of per-bus type matching data sets
match.fwnodepointer to
struct fwnode_handleto be matched. Used if match_type isV4L2_ASYNC_MATCH_FWNODE.match.device_namestring containing the device name to be matched. Used if match_type is
V4L2_ASYNC_MATCH_DEVNAME.match.i2cembedded struct with I2C parameters to be matched. Both match.i2c.adapter_id and match.i2c.address should be matched. Used if match_type is
V4L2_ASYNC_MATCH_I2C.match.i2c.adapter_idI2C adapter ID to be matched. Used if match_type is
V4L2_ASYNC_MATCH_I2C.match.i2c.addressI2C address to be matched. Used if match_type is
V4L2_ASYNC_MATCH_I2C.match.customDriver-specific match criteria. Used if match_type is
V4L2_ASYNC_MATCH_CUSTOM.match.custom.matchDriver-specific match function to be used if
V4L2_ASYNC_MATCH_CUSTOM.match.custom.privDriver-specific private struct with match parameters to be used if
V4L2_ASYNC_MATCH_CUSTOM.listused to link
struct v4l2_async_subdevobjects, waiting to be probed, to a notifier->waiting listasd_listused to add
struct v4l2_async_subdevobjects to the master notifier asd_list
Description
When this struct is used as a member in a driver specific struct,
the driver specific struct shall contain the struct
v4l2_async_subdev as its first member.
-
struct
v4l2_async_notifier_operations¶ Asynchronous V4L2 notifier operations
Definition
struct v4l2_async_notifier_operations {
int (*bound)(struct v4l2_async_notifier *notifier,struct v4l2_subdev *subdev, struct v4l2_async_subdev *asd);
int (*complete)(struct v4l2_async_notifier *notifier);
void (*unbind)(struct v4l2_async_notifier *notifier,struct v4l2_subdev *subdev, struct v4l2_async_subdev *asd);
};
Members
bounda subdevice driver has successfully probed one of the subdevices
completeAll subdevices have been probed successfully. The complete callback is only executed for the root notifier.
unbinda subdevice is leaving
-
struct
v4l2_async_notifier¶ v4l2_device notifier data
Definition
struct v4l2_async_notifier {
const struct v4l2_async_notifier_operations *ops;
struct v4l2_device *v4l2_dev;
struct v4l2_subdev *sd;
struct v4l2_async_notifier *parent;
struct list_head asd_list;
struct list_head waiting;
struct list_head done;
struct list_head list;
};
Members
opsnotifier operations
v4l2_devv4l2_device of the root notifier, NULL otherwise
sdsub-device that registered the notifier, NULL otherwise
parentparent notifier
asd_listmaster list of
struct v4l2_async_subdevwaitinglist of
struct v4l2_async_subdev, waiting for their driversdonelist of
struct v4l2_subdev, already probedlistmember in a global list of notifiers
-
void
v4l2_async_notifier_init(struct v4l2_async_notifier *notifier)¶ Initialize a notifier.
Parameters
struct v4l2_async_notifier *notifierpointer to
struct v4l2_async_notifier
Description
This function initializes the notifier asd_list. It must be called before the first call to v4l2_async_notifier_add_subdev.
-
int
v4l2_async_notifier_add_subdev(struct v4l2_async_notifier *notifier, struct v4l2_async_subdev *asd)¶ Add an async subdev to the notifier’s master asd list.
Parameters
struct v4l2_async_notifier *notifierpointer to
struct v4l2_async_notifierstruct v4l2_async_subdev *asdpointer to
struct v4l2_async_subdev
Description
Call this function before registering a notifier to link the provided asd to the notifiers master asd_list. The asd must be allocated with k*alloc() as it will be freed by the framework when the notifier is destroyed.
-
struct v4l2_async_subdev *
v4l2_async_notifier_add_fwnode_subdev(struct v4l2_async_notifier *notifier, struct fwnode_handle *fwnode, unsigned int asd_struct_size)¶ Allocate and add a fwnode async subdev to the notifier’s master asd_list.
Parameters
struct v4l2_async_notifier *notifierpointer to
struct v4l2_async_notifierstruct fwnode_handle *fwnodefwnode handle of the sub-device to be matched
unsigned int asd_struct_sizesize of the driver’s async sub-device struct, including sizeof(
struct v4l2_async_subdev). Thestruct v4l2_async_subdevshall be the first member of the driver’s async sub-device struct, i.e. both begin at the same memory address.
Description
Allocate a fwnode-matched asd of size asd_struct_size, and add it to the notifiers asd_list. The function also gets a reference of the fwnode which is released later at notifier cleanup time.
-
int
v4l2_async_notifier_add_fwnode_remote_subdev(struct v4l2_async_notifier *notif, struct fwnode_handle *endpoint, struct v4l2_async_subdev *asd)¶ Allocate and add a fwnode remote async subdev to the notifier’s master asd_list.
Parameters
struct v4l2_async_notifier *notifpointer to
struct v4l2_async_notifierstruct fwnode_handle *endpointlocal endpoint pointing to the remote sub-device to be matched
struct v4l2_async_subdev *asdAsync sub-device struct allocated by the caller. The
struct v4l2_async_subdevshall be the first member of the driver’s async sub-device struct, i.e. both begin at the same memory address.
Description
Gets the remote endpoint of a given local endpoint, set it up for fwnode matching and adds the async sub-device to the notifier’s asd_list. The function also gets a reference of the fwnode which is released later at notifier cleanup time.
This is just like v4l2_async_notifier_add_fwnode_subdev, but with the exception that the fwnode refers to a local endpoint, not the remote one, and the function relies on the caller to allocate the async sub-device struct.
-
struct v4l2_async_subdev *
v4l2_async_notifier_add_i2c_subdev(struct v4l2_async_notifier *notifier, int adapter_id, unsigned short address, unsigned int asd_struct_size)¶ Allocate and add an i2c async subdev to the notifier’s master asd_list.
Parameters
struct v4l2_async_notifier *notifierpointer to
struct v4l2_async_notifierint adapter_idI2C adapter ID to be matched
unsigned short addressI2C address of sub-device to be matched
unsigned int asd_struct_sizesize of the driver’s async sub-device struct, including sizeof(
struct v4l2_async_subdev). Thestruct v4l2_async_subdevshall be the first member of the driver’s async sub-device struct, i.e. both begin at the same memory address.
Description
Same as above but for I2C matched sub-devices.
-
struct v4l2_async_subdev *
v4l2_async_notifier_add_devname_subdev(struct v4l2_async_notifier *notifier, const char *device_name, unsigned int asd_struct_size)¶ Allocate and add a device-name async subdev to the notifier’s master asd_list.
Parameters
struct v4l2_async_notifier *notifierpointer to
struct v4l2_async_notifierconst char *device_namedevice name string to be matched
unsigned int asd_struct_sizesize of the driver’s async sub-device struct, including sizeof(
struct v4l2_async_subdev). Thestruct v4l2_async_subdevshall be the first member of the driver’s async sub-device struct, i.e. both begin at the same memory address.
Description
Same as above but for device-name matched sub-devices.
-
int
v4l2_async_notifier_register(struct v4l2_device *v4l2_dev, struct v4l2_async_notifier *notifier)¶ registers a subdevice asynchronous notifier
Parameters
struct v4l2_device *v4l2_devpointer to
struct v4l2_devicestruct v4l2_async_notifier *notifierpointer to
struct v4l2_async_notifier
-
int
v4l2_async_subdev_notifier_register(struct v4l2_subdev *sd, struct v4l2_async_notifier *notifier)¶ registers a subdevice asynchronous notifier for a sub-device
Parameters
struct v4l2_subdev *sdpointer to
struct v4l2_subdevstruct v4l2_async_notifier *notifierpointer to
struct v4l2_async_notifier
-
void
v4l2_async_notifier_unregister(struct v4l2_async_notifier *notifier)¶ unregisters a subdevice asynchronous notifier
Parameters
struct v4l2_async_notifier *notifierpointer to
struct v4l2_async_notifier
-
void
v4l2_async_notifier_cleanup(struct v4l2_async_notifier *notifier)¶ clean up notifier resources
Parameters
struct v4l2_async_notifier *notifierthe notifier the resources of which are to be cleaned up
Description
Release memory resources related to a notifier, including the async sub-devices allocated for the purposes of the notifier but not the notifier itself. The user is responsible for calling this function to clean up the notifier after calling v4l2_async_notifier_add_subdev, v4l2_async_notifier_parse_fwnode_endpoints or v4l2_fwnode_reference_parse_sensor_common.
There is no harm from calling v4l2_async_notifier_cleanup in other cases as long as its memory has been zeroed after it has been allocated.
-
int
v4l2_async_register_subdev(struct v4l2_subdev *sd)¶ registers a sub-device to the asynchronous subdevice framework
Parameters
struct v4l2_subdev *sdpointer to
struct v4l2_subdev
-
int
v4l2_async_register_subdev_sensor_common(struct v4l2_subdev *sd)¶ registers a sensor sub-device to the asynchronous sub-device framework and parse set up common sensor related devices
Parameters
struct v4l2_subdev *sdpointer to struct
v4l2_subdev
Description
This function is just like v4l2_async_register_subdev() with the exception
that calling it will also parse firmware interfaces for remote references
using v4l2_async_notifier_parse_fwnode_sensor_common() and registers the
async sub-devices. The sub-device is similarly unregistered by calling
v4l2_async_unregister_subdev().
While registered, the subdev module is marked as in-use.
An error is returned if the module is no longer loaded on any attempts to register it.
-
void
v4l2_async_unregister_subdev(struct v4l2_subdev *sd)¶ unregisters a sub-device to the asynchronous subdevice framework
Parameters
struct v4l2_subdev *sdpointer to
struct v4l2_subdev