mirror of
https://github.com/torvalds/linux.git
synced 2024-12-12 06:02:38 +00:00
[media] sh_mobile_csi2: fix module reloading
If the camera host driver (sh_mobile_ceu_camera.c) is unloaded and then reloaded, probe will fail, because camera client .set_bus_param() and .query_bus_param() methods have been set to NULL. Fix this by caching the original pointers and restoring them on driver-unbind. Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
c8dd707805
commit
cb743930eb
@ -38,6 +38,8 @@ struct sh_csi2 {
|
||||
void __iomem *base;
|
||||
struct platform_device *pdev;
|
||||
struct sh_csi2_client_config *client;
|
||||
unsigned long (*query_bus_param)(struct soc_camera_device *);
|
||||
int (*set_bus_param)(struct soc_camera_device *, unsigned long);
|
||||
};
|
||||
|
||||
static int sh_csi2_try_fmt(struct v4l2_subdev *sd,
|
||||
@ -216,6 +218,8 @@ static int sh_csi2_notify(struct notifier_block *nb,
|
||||
|
||||
priv->client = pdata->clients + i;
|
||||
|
||||
priv->set_bus_param = icd->ops->set_bus_param;
|
||||
priv->query_bus_param = icd->ops->query_bus_param;
|
||||
icd->ops->set_bus_param = sh_csi2_set_bus_param;
|
||||
icd->ops->query_bus_param = sh_csi2_query_bus_param;
|
||||
|
||||
@ -227,8 +231,10 @@ static int sh_csi2_notify(struct notifier_block *nb,
|
||||
priv->client = NULL;
|
||||
|
||||
/* Driver is about to be unbound */
|
||||
icd->ops->set_bus_param = NULL;
|
||||
icd->ops->query_bus_param = NULL;
|
||||
icd->ops->set_bus_param = priv->set_bus_param;
|
||||
icd->ops->query_bus_param = priv->query_bus_param;
|
||||
priv->set_bus_param = NULL;
|
||||
priv->query_bus_param = NULL;
|
||||
|
||||
v4l2_device_unregister_subdev(&priv->subdev);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user