Skip to content

Commit

Permalink
[media] V4L: soc_camera_platform: add helper functions to manage devi…
Browse files Browse the repository at this point in the history
…ce instances

Add helper inline functions to correctly manage dynamic allocation and
freeing of platform devices. This avoids the ugly code to nullify
device objects.

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Acked-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Guennadi Liakhovetski authored and Mauro Carvalho Chehab committed May 20, 2011
1 parent e0df541 commit ec0c8d5
Showing 1 changed file with 50 additions and 0 deletions.
50 changes: 50 additions & 0 deletions include/media/soc_camera_platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,54 @@ struct soc_camera_platform_info {
int (*set_capture)(struct soc_camera_platform_info *info, int enable);
};

static inline void soc_camera_platform_release(struct platform_device **pdev)
{
*pdev = NULL;
}

static inline int soc_camera_platform_add(const struct soc_camera_link *icl,
struct device *dev,
struct platform_device **pdev,
struct soc_camera_link *plink,
void (*release)(struct device *dev),
int id)
{
struct soc_camera_platform_info *info = plink->priv;
int ret;

if (icl != plink)
return -ENODEV;

if (*pdev)
return -EBUSY;

*pdev = platform_device_alloc("soc_camera_platform", id);
if (!*pdev)
return -ENOMEM;

info->dev = dev;

(*pdev)->dev.platform_data = info;
(*pdev)->dev.release = release;

ret = platform_device_add(*pdev);
if (ret < 0) {
platform_device_put(*pdev);
*pdev = NULL;
info->dev = NULL;
}

return ret;
}

static inline void soc_camera_platform_del(const struct soc_camera_link *icl,
struct platform_device *pdev,
const struct soc_camera_link *plink)
{
if (icl != plink || !pdev)
return;

platform_device_unregister(pdev);
}

#endif /* __SOC_CAMERA_H__ */

0 comments on commit ec0c8d5

Please sign in to comment.