at v3.7 79 lines 1.8 kB view raw
1/* 2 * Generic Platform Camera Driver Header 3 * 4 * Copyright (C) 2008 Magnus Damm 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 */ 10 11#ifndef __SOC_CAMERA_H__ 12#define __SOC_CAMERA_H__ 13 14#include <linux/videodev2.h> 15#include <media/soc_camera.h> 16#include <media/v4l2-mediabus.h> 17 18struct device; 19 20struct soc_camera_platform_info { 21 const char *format_name; 22 unsigned long format_depth; 23 struct v4l2_mbus_framefmt format; 24 unsigned long mbus_param; 25 enum v4l2_mbus_type mbus_type; 26 struct soc_camera_device *icd; 27 int (*set_capture)(struct soc_camera_platform_info *info, int enable); 28}; 29 30static inline void soc_camera_platform_release(struct platform_device **pdev) 31{ 32 *pdev = NULL; 33} 34 35static inline int soc_camera_platform_add(struct soc_camera_device *icd, 36 struct platform_device **pdev, 37 struct soc_camera_link *plink, 38 void (*release)(struct device *dev), 39 int id) 40{ 41 struct soc_camera_platform_info *info = plink->priv; 42 int ret; 43 44 if (icd->link != plink) 45 return -ENODEV; 46 47 if (*pdev) 48 return -EBUSY; 49 50 *pdev = platform_device_alloc("soc_camera_platform", id); 51 if (!*pdev) 52 return -ENOMEM; 53 54 info->icd = icd; 55 56 (*pdev)->dev.platform_data = info; 57 (*pdev)->dev.release = release; 58 59 ret = platform_device_add(*pdev); 60 if (ret < 0) { 61 platform_device_put(*pdev); 62 *pdev = NULL; 63 info->icd = NULL; 64 } 65 66 return ret; 67} 68 69static inline void soc_camera_platform_del(const struct soc_camera_device *icd, 70 struct platform_device *pdev, 71 const struct soc_camera_link *plink) 72{ 73 if (icd->link != plink || !pdev) 74 return; 75 76 platform_device_unregister(pdev); 77} 78 79#endif /* __SOC_CAMERA_H__ */