diff options
Diffstat (limited to 'drivers/media/platform/soc_camera/atmel-isi.c')
| -rw-r--r-- | drivers/media/platform/soc_camera/atmel-isi.c | 38 | 
1 files changed, 20 insertions, 18 deletions
| diff --git a/drivers/media/platform/soc_camera/atmel-isi.c b/drivers/media/platform/soc_camera/atmel-isi.c index 1abbb36d0755..104485632501 100644 --- a/drivers/media/platform/soc_camera/atmel-isi.c +++ b/drivers/media/platform/soc_camera/atmel-isi.c @@ -102,7 +102,6 @@ struct atmel_isi {  	struct list_head		video_buffer_list;  	struct frame_buffer		*active; -	struct soc_camera_device	*icd;  	struct soc_camera_host		soc_host;  }; @@ -367,7 +366,7 @@ static void start_dma(struct atmel_isi *isi, struct frame_buffer *buffer)  	/* Check if already in a frame */  	if (isi_readl(isi, ISI_STATUS) & ISI_CTRL_CDC) { -		dev_err(isi->icd->parent, "Already in frame handling.\n"); +		dev_err(isi->soc_host.icd->parent, "Already in frame handling.\n");  		return;  	} @@ -746,16 +745,26 @@ static int isi_camera_get_formats(struct soc_camera_device *icd,  	return formats;  } -/* Called with .host_lock held */  static int isi_camera_add_device(struct soc_camera_device *icd)  { -	struct soc_camera_host *ici = to_soc_camera_host(icd->parent); +	dev_dbg(icd->parent, "Atmel ISI Camera driver attached to camera %d\n", +		 icd->devnum); + +	return 0; +} + +static void isi_camera_remove_device(struct soc_camera_device *icd) +{ +	dev_dbg(icd->parent, "Atmel ISI Camera driver detached from camera %d\n", +		 icd->devnum); +} + +/* Called with .host_lock held */ +static int isi_camera_clock_start(struct soc_camera_host *ici) +{  	struct atmel_isi *isi = ici->priv;  	int ret; -	if (isi->icd) -		return -EBUSY; -  	ret = clk_enable(isi->pclk);  	if (ret)  		return ret; @@ -766,25 +775,16 @@ static int isi_camera_add_device(struct soc_camera_device *icd)  		return ret;  	} -	isi->icd = icd; -	dev_dbg(icd->parent, "Atmel ISI Camera driver attached to camera %d\n", -		 icd->devnum);  	return 0;  } +  /* Called with .host_lock held */ -static void isi_camera_remove_device(struct soc_camera_device *icd) +static void isi_camera_clock_stop(struct soc_camera_host *ici)  { -	struct soc_camera_host *ici = to_soc_camera_host(icd->parent);  	struct atmel_isi *isi = ici->priv; -	BUG_ON(icd != isi->icd); -  	clk_disable(isi->mck);  	clk_disable(isi->pclk); -	isi->icd = NULL; - -	dev_dbg(icd->parent, "Atmel ISI Camera driver detached from camera %d\n", -		 icd->devnum);  }  static unsigned int isi_camera_poll(struct file *file, poll_table *pt) @@ -888,6 +888,8 @@ static struct soc_camera_host_ops isi_soc_camera_host_ops = {  	.owner		= THIS_MODULE,  	.add		= isi_camera_add_device,  	.remove		= isi_camera_remove_device, +	.clock_start	= isi_camera_clock_start, +	.clock_stop	= isi_camera_clock_stop,  	.set_fmt	= isi_camera_set_fmt,  	.try_fmt	= isi_camera_try_fmt,  	.get_formats	= isi_camera_get_formats, |