mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
media: v4l: async: Rename v4l2_async_subdev as v4l2_async_connection
Rename v4l2_async_subdev as v4l2_async_connection, in order to differentiate between the sub-devices and their connections: one sub-device can have many connections but the V4L2 async framework has so far allowed just a single one. Connections in this context will later translate into either MC ancillary or data links. This patch prepares changing that relation by changing existing users of v4l2_async_subdev to switch to v4l2_async_connection. Async sub-devices themselves will not be needed anymore Additionally, __v4l2_async_nf_add_subdev() has been renamed __v4l2_async_nf_add_connection(). Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Tested-by: Philipp Zabel <p.zabel@pengutronix.de> # imx6qp Tested-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> # rcar + adv746x Tested-by: Aishwarya Kothari <aishwarya.kothari@toradex.com> # Apalis i.MX6Q with TC358743 Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> # Renesas RZ/G2L SMARC Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
1029939b37
commit
adb2dcd5f2
@@ -206,60 +206,67 @@ of an unregister notifier, it must be cleaned up by calling
|
||||
|
||||
Before registering the notifier, bridge drivers must do two things: first, the
|
||||
notifier must be initialized using the :c:func:`v4l2_async_nf_init`. Second,
|
||||
bridge drivers can then begin to form a list of subdevice descriptors that the
|
||||
bridge device needs for its operation. :c:func:`v4l2_async_nf_add_fwnode`,
|
||||
bridge drivers can then begin to form a list of async connection descriptors
|
||||
that the bridge device needs for its
|
||||
operation. :c:func:`v4l2_async_nf_add_fwnode`,
|
||||
:c:func:`v4l2_async_nf_add_fwnode_remote` and :c:func:`v4l2_async_nf_add_i2c`
|
||||
are available for that purpose.
|
||||
|
||||
Async connection descriptors describe connections to external sub-devices the
|
||||
drivers for which are not yet probed. Based on an async connection, a media data
|
||||
or ancillary link may be created when the related sub-device becomes
|
||||
available. There may be one or more async connections to a given sub-device but
|
||||
this is not known at the time of adding the connections to the notifier. Async
|
||||
connections are bound as matching async sub-devices are found, one by one.
|
||||
|
||||
Asynchronous sub-device registration helper for camera sensor drivers
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
:c:func:`v4l2_async_register_subdev_sensor` is a helper function for sensor
|
||||
drivers registering their own async sub-device, but it also registers a notifier
|
||||
and further registers async sub-devices for lens and flash devices found in
|
||||
drivers registering their own async connection, but it also registers a notifier
|
||||
and further registers async connections for lens and flash devices found in
|
||||
firmware. The notifier for the sub-device is unregistered and cleaned up with
|
||||
the async sub-device, using :c:func:`v4l2_async_unregister_subdev`.
|
||||
|
||||
Asynchronous sub-device notifier example
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
These functions allocate an async sub-device descriptor which is of type struct
|
||||
:c:type:`v4l2_async_subdev` embedded in a driver-specific struct. The &struct
|
||||
:c:type:`v4l2_async_subdev` shall be the first member of this struct:
|
||||
These functions allocate an async connection descriptor which is of type struct
|
||||
:c:type:`v4l2_async_connection` embedded in a driver-specific struct. The &struct
|
||||
:c:type:`v4l2_async_connection` shall be the first member of this struct:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct my_async_subdev {
|
||||
struct v4l2_async_subdev asd;
|
||||
struct my_async_connection {
|
||||
struct v4l2_async_connection asc;
|
||||
...
|
||||
};
|
||||
|
||||
struct my_async_subdev *my_asd;
|
||||
struct my_async_connection *my_asc;
|
||||
struct fwnode_handle *ep;
|
||||
|
||||
...
|
||||
|
||||
my_asd = v4l2_async_nf_add_fwnode_remote(¬ifier, ep,
|
||||
struct my_async_subdev);
|
||||
my_asc = v4l2_async_nf_add_fwnode_remote(¬ifier, ep,
|
||||
struct my_async_connection);
|
||||
fwnode_handle_put(ep);
|
||||
|
||||
if (IS_ERR(my_asd))
|
||||
return PTR_ERR(my_asd);
|
||||
if (IS_ERR(my_asc))
|
||||
return PTR_ERR(my_asc);
|
||||
|
||||
Asynchronous sub-device notifier callbacks
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The V4L2 core will then use these descriptors to match asynchronously
|
||||
registered subdevices to them. If a match is detected the ``.bound()``
|
||||
notifier callback is called. After all subdevices have been located the
|
||||
.complete() callback is called. When a subdevice is removed from the
|
||||
system the .unbind() method is called. All three callbacks are optional.
|
||||
The V4L2 core will then use these connection descriptors to match asynchronously
|
||||
registered subdevices to them. If a match is detected the ``.bound()`` notifier
|
||||
callback is called. After all connections have been bound the .complete()
|
||||
callback is called. When a connection is removed from the system the
|
||||
``.unbind()`` method is called. All three callbacks are optional.
|
||||
|
||||
Drivers can store any type of custom data in their driver-specific
|
||||
:c:type:`v4l2_async_subdev` wrapper. If any of that data requires special
|
||||
:c:type:`v4l2_async_connection` wrapper. If any of that data requires special
|
||||
handling when the structure is freed, drivers must implement the ``.destroy()``
|
||||
notifier callback. The framework will call it right before freeing the
|
||||
:c:type:`v4l2_async_subdev`.
|
||||
:c:type:`v4l2_async_connection`.
|
||||
|
||||
Calling subdev operations
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -518,7 +518,7 @@ static const struct media_entity_operations ub913_entity_ops = {
|
||||
|
||||
static int ub913_notify_bound(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *source_subdev,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct ub913_data *priv = sd_to_ub913(notifier->sd);
|
||||
struct device *dev = &priv->client->dev;
|
||||
@@ -557,7 +557,7 @@ static const struct v4l2_async_notifier_operations ub913_notify_ops = {
|
||||
static int ub913_v4l2_notifier_register(struct ub913_data *priv)
|
||||
{
|
||||
struct device *dev = &priv->client->dev;
|
||||
struct v4l2_async_subdev *asd;
|
||||
struct v4l2_async_connection *asd;
|
||||
struct fwnode_handle *ep_fwnode;
|
||||
int ret;
|
||||
|
||||
@@ -571,7 +571,7 @@ static int ub913_v4l2_notifier_register(struct ub913_data *priv)
|
||||
v4l2_async_nf_init(&priv->notifier);
|
||||
|
||||
asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep_fwnode,
|
||||
struct v4l2_async_subdev);
|
||||
struct v4l2_async_connection);
|
||||
|
||||
fwnode_handle_put(ep_fwnode);
|
||||
|
||||
|
||||
@@ -723,7 +723,7 @@ static const struct media_entity_operations ub953_entity_ops = {
|
||||
|
||||
static int ub953_notify_bound(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *source_subdev,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct ub953_data *priv = sd_to_ub953(notifier->sd);
|
||||
struct device *dev = &priv->client->dev;
|
||||
@@ -762,7 +762,7 @@ static const struct v4l2_async_notifier_operations ub953_notify_ops = {
|
||||
static int ub953_v4l2_notifier_register(struct ub953_data *priv)
|
||||
{
|
||||
struct device *dev = &priv->client->dev;
|
||||
struct v4l2_async_subdev *asd;
|
||||
struct v4l2_async_connection *asd;
|
||||
struct fwnode_handle *ep_fwnode;
|
||||
int ret;
|
||||
|
||||
@@ -776,7 +776,7 @@ static int ub953_v4l2_notifier_register(struct ub953_data *priv)
|
||||
v4l2_async_nf_init(&priv->notifier);
|
||||
|
||||
asd = v4l2_async_nf_add_fwnode_remote(&priv->notifier, ep_fwnode,
|
||||
struct v4l2_async_subdev);
|
||||
struct v4l2_async_connection);
|
||||
|
||||
fwnode_handle_put(ep_fwnode);
|
||||
|
||||
|
||||
@@ -471,11 +471,11 @@ struct ub960_rxport {
|
||||
};
|
||||
|
||||
struct ub960_asd {
|
||||
struct v4l2_async_subdev base;
|
||||
struct v4l2_async_connection base;
|
||||
struct ub960_rxport *rxport;
|
||||
};
|
||||
|
||||
static inline struct ub960_asd *to_ub960_asd(struct v4l2_async_subdev *asd)
|
||||
static inline struct ub960_asd *to_ub960_asd(struct v4l2_async_connection *asd)
|
||||
{
|
||||
return container_of(asd, struct ub960_asd, base);
|
||||
}
|
||||
@@ -3538,7 +3538,7 @@ err_free_rxports:
|
||||
|
||||
static int ub960_notify_bound(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *subdev,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct ub960_data *priv = sd_to_ub960(notifier->sd);
|
||||
struct ub960_rxport *rxport = to_ub960_asd(asd)->rxport;
|
||||
@@ -3581,7 +3581,7 @@ static int ub960_notify_bound(struct v4l2_async_notifier *notifier,
|
||||
|
||||
static void ub960_notify_unbind(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *subdev,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct ub960_rxport *rxport = to_ub960_asd(asd)->rxport;
|
||||
|
||||
|
||||
@@ -161,11 +161,12 @@ struct max9286_source {
|
||||
};
|
||||
|
||||
struct max9286_asd {
|
||||
struct v4l2_async_subdev base;
|
||||
struct v4l2_async_connection base;
|
||||
struct max9286_source *source;
|
||||
};
|
||||
|
||||
static inline struct max9286_asd *to_max9286_asd(struct v4l2_async_subdev *asd)
|
||||
static inline struct max9286_asd *
|
||||
to_max9286_asd(struct v4l2_async_connection *asd)
|
||||
{
|
||||
return container_of(asd, struct max9286_asd, base);
|
||||
}
|
||||
@@ -659,7 +660,7 @@ static int max9286_set_pixelrate(struct max9286_priv *priv)
|
||||
|
||||
static int max9286_notify_bound(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *subdev,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct max9286_priv *priv = sd_to_max9286(notifier->sd);
|
||||
struct max9286_source *source = to_max9286_asd(asd)->source;
|
||||
@@ -721,7 +722,7 @@ static int max9286_notify_bound(struct v4l2_async_notifier *notifier,
|
||||
|
||||
static void max9286_notify_unbind(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *subdev,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct max9286_priv *priv = sd_to_max9286(notifier->sd);
|
||||
struct max9286_source *source = to_max9286_asd(asd)->source;
|
||||
|
||||
@@ -829,7 +829,7 @@ static const struct media_entity_operations mipid02_subdev_entity_ops = {
|
||||
|
||||
static int mipid02_async_bound(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *s_subdev,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct mipid02_dev *bridge = to_mipid02_dev(notifier->sd);
|
||||
struct i2c_client *client = bridge->i2c_client;
|
||||
@@ -863,7 +863,7 @@ static int mipid02_async_bound(struct v4l2_async_notifier *notifier,
|
||||
|
||||
static void mipid02_async_unbind(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *s_subdev,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct mipid02_dev *bridge = to_mipid02_dev(notifier->sd);
|
||||
|
||||
@@ -879,7 +879,7 @@ static int mipid02_parse_rx_ep(struct mipid02_dev *bridge)
|
||||
{
|
||||
struct v4l2_fwnode_endpoint ep = { .bus_type = V4L2_MBUS_CSI2_DPHY };
|
||||
struct i2c_client *client = bridge->i2c_client;
|
||||
struct v4l2_async_subdev *asd;
|
||||
struct v4l2_async_connection *asd;
|
||||
struct device_node *ep_node;
|
||||
int ret;
|
||||
|
||||
@@ -914,7 +914,7 @@ static int mipid02_parse_rx_ep(struct mipid02_dev *bridge)
|
||||
v4l2_async_nf_init(&bridge->notifier);
|
||||
asd = v4l2_async_nf_add_fwnode_remote(&bridge->notifier,
|
||||
of_fwnode_handle(ep_node),
|
||||
struct v4l2_async_subdev);
|
||||
struct v4l2_async_connection);
|
||||
of_node_put(ep_node);
|
||||
|
||||
if (IS_ERR(asd)) {
|
||||
|
||||
@@ -1426,7 +1426,7 @@ static int tc358746_init_controls(struct tc358746 *tc358746)
|
||||
|
||||
static int tc358746_notify_bound(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *sd,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct tc358746 *tc358746 =
|
||||
container_of(notifier, struct tc358746, notifier);
|
||||
@@ -1445,7 +1445,7 @@ static int tc358746_async_register(struct tc358746 *tc358746)
|
||||
struct v4l2_fwnode_endpoint vep = {
|
||||
.bus_type = V4L2_MBUS_PARALLEL,
|
||||
};
|
||||
struct v4l2_async_subdev *asd;
|
||||
struct v4l2_async_connection *asd;
|
||||
struct fwnode_handle *ep;
|
||||
int err;
|
||||
|
||||
@@ -1462,7 +1462,7 @@ static int tc358746_async_register(struct tc358746 *tc358746)
|
||||
|
||||
v4l2_async_nf_init(&tc358746->notifier);
|
||||
asd = v4l2_async_nf_add_fwnode_remote(&tc358746->notifier, ep,
|
||||
struct v4l2_async_subdev);
|
||||
struct v4l2_async_connection);
|
||||
fwnode_handle_put(ep);
|
||||
|
||||
if (IS_ERR(asd)) {
|
||||
|
||||
@@ -1372,7 +1372,7 @@ static const struct v4l2_subdev_ops cio2_subdev_ops = {
|
||||
/******* V4L2 sub-device asynchronous registration callbacks***********/
|
||||
|
||||
struct sensor_async_subdev {
|
||||
struct v4l2_async_subdev asd;
|
||||
struct v4l2_async_connection asd;
|
||||
struct csi2_bus_info csi2;
|
||||
};
|
||||
|
||||
@@ -1382,7 +1382,7 @@ struct sensor_async_subdev {
|
||||
/* The .bound() notifier callback when a match is found */
|
||||
static int cio2_notifier_bound(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *sd,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct cio2_device *cio2 = to_cio2_device(notifier);
|
||||
struct sensor_async_subdev *s_asd = to_sensor_asd(asd);
|
||||
@@ -1403,7 +1403,7 @@ static int cio2_notifier_bound(struct v4l2_async_notifier *notifier,
|
||||
/* The .unbind callback */
|
||||
static void cio2_notifier_unbind(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *sd,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct cio2_device *cio2 = to_cio2_device(notifier);
|
||||
struct sensor_async_subdev *s_asd = to_sensor_asd(asd);
|
||||
@@ -1417,11 +1417,11 @@ static int cio2_notifier_complete(struct v4l2_async_notifier *notifier)
|
||||
struct cio2_device *cio2 = to_cio2_device(notifier);
|
||||
struct device *dev = &cio2->pci_dev->dev;
|
||||
struct sensor_async_subdev *s_asd;
|
||||
struct v4l2_async_subdev *asd;
|
||||
struct v4l2_async_connection *asd;
|
||||
struct cio2_queue *q;
|
||||
int ret;
|
||||
|
||||
list_for_each_entry(asd, &cio2->notifier.asd_list, asd_entry) {
|
||||
list_for_each_entry(asd, &cio2->notifier.asc_list, asc_entry) {
|
||||
s_asd = to_sensor_asd(asd);
|
||||
q = &cio2->queue[s_asd->csi2.port];
|
||||
|
||||
|
||||
@@ -1120,7 +1120,7 @@ static int isi_graph_notify_complete(struct v4l2_async_notifier *notifier)
|
||||
|
||||
static void isi_graph_notify_unbind(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *sd,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct atmel_isi *isi = notifier_to_isi(notifier);
|
||||
|
||||
@@ -1132,7 +1132,7 @@ static void isi_graph_notify_unbind(struct v4l2_async_notifier *notifier,
|
||||
|
||||
static int isi_graph_notify_bound(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *subdev,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct atmel_isi *isi = notifier_to_isi(notifier);
|
||||
|
||||
@@ -1151,7 +1151,7 @@ static const struct v4l2_async_notifier_operations isi_graph_notify_ops = {
|
||||
|
||||
static int isi_graph_init(struct atmel_isi *isi)
|
||||
{
|
||||
struct v4l2_async_subdev *asd;
|
||||
struct v4l2_async_connection *asd;
|
||||
struct device_node *ep;
|
||||
int ret;
|
||||
|
||||
@@ -1163,7 +1163,7 @@ static int isi_graph_init(struct atmel_isi *isi)
|
||||
|
||||
asd = v4l2_async_nf_add_fwnode_remote(&isi->notifier,
|
||||
of_fwnode_handle(ep),
|
||||
struct v4l2_async_subdev);
|
||||
struct v4l2_async_connection);
|
||||
of_node_put(ep);
|
||||
|
||||
if (IS_ERR(asd))
|
||||
|
||||
@@ -313,7 +313,7 @@ static const struct v4l2_subdev_ops csi2rx_subdev_ops = {
|
||||
|
||||
static int csi2rx_async_bound(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *s_subdev,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct v4l2_subdev *subdev = notifier->sd;
|
||||
struct csi2rx_priv *csi2rx = v4l2_subdev_to_csi2rx(subdev);
|
||||
@@ -440,7 +440,7 @@ static int csi2rx_get_resources(struct csi2rx_priv *csi2rx,
|
||||
static int csi2rx_parse_dt(struct csi2rx_priv *csi2rx)
|
||||
{
|
||||
struct v4l2_fwnode_endpoint v4l2_ep = { .bus_type = 0 };
|
||||
struct v4l2_async_subdev *asd;
|
||||
struct v4l2_async_connection *asd;
|
||||
struct fwnode_handle *fwh;
|
||||
struct device_node *ep;
|
||||
int ret;
|
||||
@@ -477,7 +477,7 @@ static int csi2rx_parse_dt(struct csi2rx_priv *csi2rx)
|
||||
v4l2_async_nf_init(&csi2rx->notifier);
|
||||
|
||||
asd = v4l2_async_nf_add_fwnode_remote(&csi2rx->notifier, fwh,
|
||||
struct v4l2_async_subdev);
|
||||
struct v4l2_async_connection);
|
||||
of_node_put(ep);
|
||||
if (IS_ERR(asd))
|
||||
return PTR_ERR(asd);
|
||||
|
||||
@@ -2044,7 +2044,7 @@ static const struct video_device pxa_camera_videodev_template = {
|
||||
|
||||
static int pxa_camera_sensor_bound(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *subdev,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
int err;
|
||||
struct v4l2_device *v4l2_dev = notifier->v4l2_dev;
|
||||
@@ -2123,7 +2123,7 @@ out:
|
||||
|
||||
static void pxa_camera_sensor_unbind(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *subdev,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct pxa_camera_dev *pcdev = v4l2_dev_to_pcdev(notifier->v4l2_dev);
|
||||
|
||||
@@ -2197,7 +2197,7 @@ static int pxa_camera_pdata_from_dt(struct device *dev,
|
||||
struct pxa_camera_dev *pcdev)
|
||||
{
|
||||
u32 mclk_rate;
|
||||
struct v4l2_async_subdev *asd;
|
||||
struct v4l2_async_connection *asd;
|
||||
struct device_node *np = dev->of_node;
|
||||
struct v4l2_fwnode_endpoint ep = { .bus_type = 0 };
|
||||
int err = of_property_read_u32(np, "clock-frequency",
|
||||
@@ -2252,7 +2252,7 @@ static int pxa_camera_pdata_from_dt(struct device *dev,
|
||||
|
||||
asd = v4l2_async_nf_add_fwnode_remote(&pcdev->notifier,
|
||||
of_fwnode_handle(np),
|
||||
struct v4l2_async_subdev);
|
||||
struct v4l2_async_connection);
|
||||
if (IS_ERR(asd))
|
||||
err = PTR_ERR(asd);
|
||||
out:
|
||||
@@ -2299,14 +2299,14 @@ static int pxa_camera_probe(struct platform_device *pdev)
|
||||
pcdev->res = res;
|
||||
pcdev->pdata = pdev->dev.platform_data;
|
||||
if (pcdev->pdata) {
|
||||
struct v4l2_async_subdev *asd;
|
||||
struct v4l2_async_connection *asd;
|
||||
|
||||
pcdev->platform_flags = pcdev->pdata->flags;
|
||||
pcdev->mclk = pcdev->pdata->mclk_10khz * 10000;
|
||||
asd = v4l2_async_nf_add_i2c(&pcdev->notifier,
|
||||
pcdev->pdata->sensor_i2c_adapter_id,
|
||||
pcdev->pdata->sensor_i2c_address,
|
||||
struct v4l2_async_subdev);
|
||||
struct v4l2_async_connection);
|
||||
if (IS_ERR(asd))
|
||||
err = PTR_ERR(asd);
|
||||
} else if (pdev->dev.of_node) {
|
||||
|
||||
@@ -478,7 +478,7 @@ static int cafe_pci_probe(struct pci_dev *pdev,
|
||||
int ret;
|
||||
struct cafe_camera *cam;
|
||||
struct mcam_camera *mcam;
|
||||
struct v4l2_async_subdev *asd;
|
||||
struct v4l2_async_connection *asd;
|
||||
struct i2c_client *i2c_dev;
|
||||
|
||||
/*
|
||||
@@ -540,7 +540,8 @@ static int cafe_pci_probe(struct pci_dev *pdev,
|
||||
|
||||
asd = v4l2_async_nf_add_i2c(&mcam->notifier,
|
||||
i2c_adapter_id(cam->i2c_adapter),
|
||||
ov7670_info.addr, struct v4l2_async_subdev);
|
||||
ov7670_info.addr,
|
||||
struct v4l2_async_connection);
|
||||
if (IS_ERR(asd)) {
|
||||
ret = PTR_ERR(asd);
|
||||
goto out_smbus_shutdown;
|
||||
|
||||
@@ -1756,7 +1756,7 @@ EXPORT_SYMBOL_GPL(mccic_irq);
|
||||
*/
|
||||
|
||||
static int mccic_notify_bound(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *subdev, struct v4l2_async_subdev *asd)
|
||||
struct v4l2_subdev *subdev, struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct mcam_camera *cam = notifier_to_mcam(notifier);
|
||||
int ret;
|
||||
@@ -1801,7 +1801,7 @@ out:
|
||||
}
|
||||
|
||||
static void mccic_notify_unbind(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *subdev, struct v4l2_async_subdev *asd)
|
||||
struct v4l2_subdev *subdev, struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct mcam_camera *cam = notifier_to_mcam(notifier);
|
||||
|
||||
|
||||
@@ -180,7 +180,7 @@ static int mmpcam_probe(struct platform_device *pdev)
|
||||
struct resource *res;
|
||||
struct fwnode_handle *ep;
|
||||
struct mmp_camera_platform_data *pdata;
|
||||
struct v4l2_async_subdev *asd;
|
||||
struct v4l2_async_connection *asd;
|
||||
int ret;
|
||||
|
||||
cam = devm_kzalloc(&pdev->dev, sizeof(*cam), GFP_KERNEL);
|
||||
@@ -241,7 +241,7 @@ static int mmpcam_probe(struct platform_device *pdev)
|
||||
v4l2_async_nf_init(&mcam->notifier);
|
||||
|
||||
asd = v4l2_async_nf_add_fwnode_remote(&mcam->notifier, ep,
|
||||
struct v4l2_async_subdev);
|
||||
struct v4l2_async_connection);
|
||||
fwnode_handle_put(ep);
|
||||
if (IS_ERR(asd)) {
|
||||
ret = PTR_ERR(asd);
|
||||
|
||||
@@ -476,7 +476,7 @@ static const struct v4l2_subdev_ops csi2dc_subdev_ops = {
|
||||
|
||||
static int csi2dc_async_bound(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *subdev,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct csi2dc_device *csi2dc = container_of(notifier,
|
||||
struct csi2dc_device, notifier);
|
||||
@@ -520,14 +520,14 @@ static const struct v4l2_async_notifier_operations csi2dc_async_ops = {
|
||||
static int csi2dc_prepare_notifier(struct csi2dc_device *csi2dc,
|
||||
struct fwnode_handle *input_fwnode)
|
||||
{
|
||||
struct v4l2_async_subdev *asd;
|
||||
struct v4l2_async_connection *asd;
|
||||
int ret = 0;
|
||||
|
||||
v4l2_async_nf_init(&csi2dc->notifier);
|
||||
|
||||
asd = v4l2_async_nf_add_fwnode_remote(&csi2dc->notifier,
|
||||
input_fwnode,
|
||||
struct v4l2_async_subdev);
|
||||
struct v4l2_async_connection);
|
||||
|
||||
fwnode_handle_put(input_fwnode);
|
||||
|
||||
|
||||
@@ -1712,7 +1712,7 @@ static int isc_ctrl_init(struct isc_device *isc)
|
||||
|
||||
static int isc_async_bound(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *subdev,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct isc_device *isc = container_of(notifier->v4l2_dev,
|
||||
struct isc_device, v4l2_dev);
|
||||
@@ -1741,7 +1741,7 @@ static int isc_async_bound(struct v4l2_async_notifier *notifier,
|
||||
|
||||
static void isc_async_unbind(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *subdev,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct isc_device *isc = container_of(notifier->v4l2_dev,
|
||||
struct isc_device, v4l2_dev);
|
||||
|
||||
@@ -44,7 +44,7 @@ struct isc_buffer {
|
||||
|
||||
struct isc_subdev_entity {
|
||||
struct v4l2_subdev *sd;
|
||||
struct v4l2_async_subdev *asd;
|
||||
struct v4l2_async_connection *asd;
|
||||
struct device_node *epn;
|
||||
struct v4l2_async_notifier notifier;
|
||||
|
||||
|
||||
@@ -523,7 +523,7 @@ static int microchip_isc_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
list_for_each_entry(subdev_entity, &isc->subdev_entities, list) {
|
||||
struct v4l2_async_subdev *asd;
|
||||
struct v4l2_async_connection *asd;
|
||||
struct fwnode_handle *fwnode =
|
||||
of_fwnode_handle(subdev_entity->epn);
|
||||
|
||||
@@ -531,7 +531,7 @@ static int microchip_isc_probe(struct platform_device *pdev)
|
||||
|
||||
asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
|
||||
fwnode,
|
||||
struct v4l2_async_subdev);
|
||||
struct v4l2_async_connection);
|
||||
|
||||
of_node_put(subdev_entity->epn);
|
||||
subdev_entity->epn = NULL;
|
||||
|
||||
@@ -513,7 +513,7 @@ static int microchip_xisc_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
list_for_each_entry(subdev_entity, &isc->subdev_entities, list) {
|
||||
struct v4l2_async_subdev *asd;
|
||||
struct v4l2_async_connection *asd;
|
||||
struct fwnode_handle *fwnode =
|
||||
of_fwnode_handle(subdev_entity->epn);
|
||||
|
||||
@@ -521,7 +521,7 @@ static int microchip_xisc_probe(struct platform_device *pdev)
|
||||
|
||||
asd = v4l2_async_nf_add_fwnode_remote(&subdev_entity->notifier,
|
||||
fwnode,
|
||||
struct v4l2_async_subdev);
|
||||
struct v4l2_async_connection);
|
||||
|
||||
of_node_put(subdev_entity->epn);
|
||||
subdev_entity->epn = NULL;
|
||||
|
||||
@@ -1229,7 +1229,7 @@ mipi_notifier_to_csis_state(struct v4l2_async_notifier *n)
|
||||
|
||||
static int mipi_csis_notify_bound(struct v4l2_async_notifier *notifier,
|
||||
struct v4l2_subdev *sd,
|
||||
struct v4l2_async_subdev *asd)
|
||||
struct v4l2_async_connection *asd)
|
||||
{
|
||||
struct mipi_csis_device *csis = mipi_notifier_to_csis_state(notifier);
|
||||
struct media_pad *sink = &csis->sd.entity.pads[CSIS_PAD_SINK];
|
||||
@@ -1246,7 +1246,7 @@ static int mipi_csis_async_register(struct mipi_csis_device *csis)
|
||||
struct v4l2_fwnode_endpoint vep = {
|
||||
.bus_type = V4L2_MBUS_CSI2_DPHY,
|
||||
};
|
||||
struct v4l2_async_subdev *asd;
|
||||
struct v4l2_async_connection *asd;
|
||||
struct fwnode_handle *ep;
|
||||
unsigned int i;
|
||||
int ret;
|
||||
@@ -1277,7 +1277,7 @@ static int mipi_csis_async_register(struct mipi_csis_device *csis)
|
||||
dev_dbg(csis->dev, "flags: 0x%08x\n", csis->bus.flags);
|
||||
|
||||
asd = v4l2_async_nf_add_fwnode_remote(&csis->notifier, ep,
|
||||
struct v4l2_async_subdev);
|
||||
struct v4l2_async_connection);
|
||||
if (IS_ERR(asd)) {
|
||||
ret = PTR_ERR(asd);
|
||||
goto err_parse;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user