linux/include/media/soc_camera_platform.h
<<
>>
Prefs
   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__ */
  80
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.