Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Samsung LSI S5C73M3 8M pixel camera driver
0004  *
0005  * Copyright (C) 2012, Samsung Electronics, Co., Ltd.
0006  * Sylwester Nawrocki <s.nawrocki@samsung.com>
0007  * Andrzej Hajda <a.hajda@samsung.com>
0008  */
0009 #ifndef S5C73M3_H_
0010 #define S5C73M3_H_
0011 
0012 #include <linux/clk.h>
0013 #include <linux/kernel.h>
0014 #include <linux/regulator/consumer.h>
0015 #include <media/v4l2-common.h>
0016 #include <media/v4l2-ctrls.h>
0017 #include <media/v4l2-subdev.h>
0018 #include <media/i2c/s5c73m3.h>
0019 
0020 #define DRIVER_NAME         "S5C73M3"
0021 
0022 #define S5C73M3_ISP_FMT         MEDIA_BUS_FMT_VYUY8_2X8
0023 #define S5C73M3_JPEG_FMT        MEDIA_BUS_FMT_S5C_UYVY_JPEG_1X8
0024 
0025 /* Subdevs pad index definitions */
0026 enum s5c73m3_pads {
0027     S5C73M3_ISP_PAD,
0028     S5C73M3_JPEG_PAD,
0029     S5C73M3_NUM_PADS
0030 };
0031 
0032 enum s5c73m3_oif_pads {
0033     OIF_ISP_PAD,
0034     OIF_JPEG_PAD,
0035     OIF_SOURCE_PAD,
0036     OIF_NUM_PADS
0037 };
0038 
0039 #define S5C73M3_SENSOR_FW_LEN       6
0040 #define S5C73M3_SENSOR_TYPE_LEN     12
0041 
0042 #define S5C73M3_REG(_addrh, _addrl) (((_addrh) << 16) | _addrl)
0043 
0044 #define AHB_MSB_ADDR_PTR            0xfcfc
0045 #define REG_CMDWR_ADDRH             0x0050
0046 #define REG_CMDWR_ADDRL             0x0054
0047 #define REG_CMDRD_ADDRH             0x0058
0048 #define REG_CMDRD_ADDRL             0x005c
0049 #define REG_CMDBUF_ADDR             0x0f14
0050 
0051 #define REG_I2C_SEQ_STATUS          S5C73M3_REG(0x0009, 0x59A6)
0052 #define  SEQ_END_PLL                (1<<0x0)
0053 #define  SEQ_END_SENSOR             (1<<0x1)
0054 #define  SEQ_END_GPIO               (1<<0x2)
0055 #define  SEQ_END_FROM               (1<<0x3)
0056 #define  SEQ_END_STABLE_AE_AWB          (1<<0x4)
0057 #define  SEQ_END_READY_I2C_CMD          (1<<0x5)
0058 
0059 #define REG_I2C_STATUS              S5C73M3_REG(0x0009, 0x599E)
0060 #define  I2C_STATUS_CIS_I2C         (1<<0x0)
0061 #define  I2C_STATUS_AF_INIT         (1<<0x1)
0062 #define  I2C_STATUS_CAL_DATA            (1<<0x2)
0063 #define  I2C_STATUS_FRAME_COUNT         (1<<0x3)
0064 #define  I2C_STATUS_FROM_INIT           (1<<0x4)
0065 #define  I2C_STATUS_I2C_CIS_STREAM_OFF      (1<<0x5)
0066 #define  I2C_STATUS_I2C_N_CMD_OVER      (1<<0x6)
0067 #define  I2C_STATUS_I2C_N_CMD_MISMATCH      (1<<0x7)
0068 #define  I2C_STATUS_CHECK_BIN_CRC       (1<<0x8)
0069 #define  I2C_STATUS_EXCEPTION           (1<<0x9)
0070 #define  I2C_STATUS_INIF_INIT_STATE     (0x8)
0071 
0072 #define REG_STATUS              S5C73M3_REG(0x0009, 0x5080)
0073 #define  REG_STATUS_BOOT_SUB_MAIN_ENTER     0xff01
0074 #define  REG_STATUS_BOOT_SRAM_TIMING_OK     0xff02
0075 #define  REG_STATUS_BOOT_INTERRUPTS_EN      0xff03
0076 #define  REG_STATUS_BOOT_R_PLL_DONE     0xff04
0077 #define  REG_STATUS_BOOT_R_PLL_LOCKTIME_DONE    0xff05
0078 #define  REG_STATUS_BOOT_DELAY_COUNT_DONE   0xff06
0079 #define  REG_STATUS_BOOT_I_PLL_DONE     0xff07
0080 #define  REG_STATUS_BOOT_I_PLL_LOCKTIME_DONE    0xff08
0081 #define  REG_STATUS_BOOT_PLL_INIT_OK        0xff09
0082 #define  REG_STATUS_BOOT_SENSOR_INIT_OK     0xff0a
0083 #define  REG_STATUS_BOOT_GPIO_SETTING_OK    0xff0b
0084 #define  REG_STATUS_BOOT_READ_CAL_DATA_OK   0xff0c
0085 #define  REG_STATUS_BOOT_STABLE_AE_AWB_OK   0xff0d
0086 #define  REG_STATUS_ISP_COMMAND_COMPLETED   0xffff
0087 #define  REG_STATUS_EXCEPTION_OCCURED       0xdead
0088 
0089 #define COMM_RESULT_OFFSET          S5C73M3_REG(0x0009, 0x5000)
0090 
0091 #define COMM_IMG_OUTPUT             0x0902
0092 #define  COMM_IMG_OUTPUT_HDR            0x0008
0093 #define  COMM_IMG_OUTPUT_YUV            0x0009
0094 #define  COMM_IMG_OUTPUT_INTERLEAVED        0x000d
0095 
0096 #define COMM_STILL_PRE_FLASH            0x0a00
0097 #define  COMM_STILL_PRE_FLASH_FIRE      0x0000
0098 #define  COMM_STILL_PRE_FLASH_NON_FIRED     0x0000
0099 #define  COMM_STILL_PRE_FLASH_FIRED     0x0001
0100 
0101 #define COMM_STILL_MAIN_FLASH           0x0a02
0102 #define  COMM_STILL_MAIN_FLASH_CANCEL       0x0001
0103 #define  COMM_STILL_MAIN_FLASH_FIRE     0x0002
0104 
0105 #define COMM_ZOOM_STEP              0x0b00
0106 
0107 #define COMM_IMAGE_EFFECT           0x0b0a
0108 #define  COMM_IMAGE_EFFECT_NONE         0x0001
0109 #define  COMM_IMAGE_EFFECT_NEGATIVE     0x0002
0110 #define  COMM_IMAGE_EFFECT_AQUA         0x0003
0111 #define  COMM_IMAGE_EFFECT_SEPIA        0x0004
0112 #define  COMM_IMAGE_EFFECT_MONO         0x0005
0113 
0114 #define COMM_IMAGE_QUALITY          0x0b0c
0115 #define  COMM_IMAGE_QUALITY_SUPERFINE       0x0000
0116 #define  COMM_IMAGE_QUALITY_FINE        0x0001
0117 #define  COMM_IMAGE_QUALITY_NORMAL      0x0002
0118 
0119 #define COMM_FLASH_MODE             0x0b0e
0120 #define  COMM_FLASH_MODE_OFF            0x0000
0121 #define  COMM_FLASH_MODE_ON         0x0001
0122 #define  COMM_FLASH_MODE_AUTO           0x0002
0123 
0124 #define COMM_FLASH_STATUS           0x0b80
0125 #define  COMM_FLASH_STATUS_OFF          0x0001
0126 #define  COMM_FLASH_STATUS_ON           0x0002
0127 #define  COMM_FLASH_STATUS_AUTO         0x0003
0128 
0129 #define COMM_FLASH_TORCH            0x0b12
0130 #define  COMM_FLASH_TORCH_OFF           0x0000
0131 #define  COMM_FLASH_TORCH_ON            0x0001
0132 
0133 #define COMM_AE_NEEDS_FLASH         0x0cba
0134 #define  COMM_AE_NEEDS_FLASH_OFF        0x0000
0135 #define  COMM_AE_NEEDS_FLASH_ON         0x0001
0136 
0137 #define COMM_CHG_MODE               0x0b10
0138 #define  COMM_CHG_MODE_NEW          0x8000
0139 #define  COMM_CHG_MODE_SUBSAMPLING_HALF     0x2000
0140 #define  COMM_CHG_MODE_SUBSAMPLING_QUARTER  0x4000
0141 
0142 #define  COMM_CHG_MODE_YUV_320_240      0x0001
0143 #define  COMM_CHG_MODE_YUV_640_480      0x0002
0144 #define  COMM_CHG_MODE_YUV_880_720      0x0003
0145 #define  COMM_CHG_MODE_YUV_960_720      0x0004
0146 #define  COMM_CHG_MODE_YUV_1184_666     0x0005
0147 #define  COMM_CHG_MODE_YUV_1280_720     0x0006
0148 #define  COMM_CHG_MODE_YUV_1536_864     0x0007
0149 #define  COMM_CHG_MODE_YUV_1600_1200        0x0008
0150 #define  COMM_CHG_MODE_YUV_1632_1224        0x0009
0151 #define  COMM_CHG_MODE_YUV_1920_1080        0x000a
0152 #define  COMM_CHG_MODE_YUV_1920_1440        0x000b
0153 #define  COMM_CHG_MODE_YUV_2304_1296        0x000c
0154 #define  COMM_CHG_MODE_YUV_3264_2448        0x000d
0155 #define  COMM_CHG_MODE_YUV_352_288      0x000e
0156 #define  COMM_CHG_MODE_YUV_1008_672     0x000f
0157 
0158 #define  COMM_CHG_MODE_JPEG_640_480     0x0010
0159 #define  COMM_CHG_MODE_JPEG_800_450     0x0020
0160 #define  COMM_CHG_MODE_JPEG_800_600     0x0030
0161 #define  COMM_CHG_MODE_JPEG_1280_720        0x0040
0162 #define  COMM_CHG_MODE_JPEG_1280_960        0x0050
0163 #define  COMM_CHG_MODE_JPEG_1600_900        0x0060
0164 #define  COMM_CHG_MODE_JPEG_1600_1200       0x0070
0165 #define  COMM_CHG_MODE_JPEG_2048_1152       0x0080
0166 #define  COMM_CHG_MODE_JPEG_2048_1536       0x0090
0167 #define  COMM_CHG_MODE_JPEG_2560_1440       0x00a0
0168 #define  COMM_CHG_MODE_JPEG_2560_1920       0x00b0
0169 #define  COMM_CHG_MODE_JPEG_3264_2176       0x00c0
0170 #define  COMM_CHG_MODE_JPEG_1024_768        0x00d0
0171 #define  COMM_CHG_MODE_JPEG_3264_1836       0x00e0
0172 #define  COMM_CHG_MODE_JPEG_3264_2448       0x00f0
0173 
0174 #define COMM_AF_CON             0x0e00
0175 #define  COMM_AF_CON_STOP           0x0000
0176 #define  COMM_AF_CON_SCAN           0x0001 /* Full Search */
0177 #define  COMM_AF_CON_START          0x0002 /* Fast Search */
0178 
0179 #define COMM_AF_CAL             0x0e06
0180 #define COMM_AF_TOUCH_AF            0x0e0a
0181 
0182 #define REG_AF_STATUS               S5C73M3_REG(0x0009, 0x5e80)
0183 #define  REG_CAF_STATUS_FIND_SEARCH_DIR     0x0001
0184 #define  REG_CAF_STATUS_FOCUSING        0x0002
0185 #define  REG_CAF_STATUS_FOCUSED         0x0003
0186 #define  REG_CAF_STATUS_UNFOCUSED       0x0004
0187 #define  REG_AF_STATUS_INVALID          0x0010
0188 #define  REG_AF_STATUS_FOCUSING         0x0020
0189 #define  REG_AF_STATUS_FOCUSED          0x0030
0190 #define  REG_AF_STATUS_UNFOCUSED        0x0040
0191 
0192 #define REG_AF_TOUCH_POSITION           S5C73M3_REG(0x0009, 0x5e8e)
0193 #define COMM_AF_FACE_ZOOM           0x0e10
0194 
0195 #define COMM_AF_MODE                0x0e02
0196 #define  COMM_AF_MODE_NORMAL            0x0000
0197 #define  COMM_AF_MODE_MACRO         0x0001
0198 #define  COMM_AF_MODE_MOVIE_CAF_START       0x0002
0199 #define  COMM_AF_MODE_MOVIE_CAF_STOP        0x0003
0200 #define  COMM_AF_MODE_PREVIEW_CAF_START     0x0004
0201 #define  COMM_AF_MODE_PREVIEW_CAF_STOP      0x0005
0202 
0203 #define COMM_AF_SOFTLANDING         0x0e16
0204 #define  COMM_AF_SOFTLANDING_ON         0x0000
0205 #define  COMM_AF_SOFTLANDING_RES_COMPLETE   0x0001
0206 
0207 #define COMM_FACE_DET               0x0e0c
0208 #define  COMM_FACE_DET_OFF          0x0000
0209 #define  COMM_FACE_DET_ON           0x0001
0210 
0211 #define COMM_FACE_DET_OSD           0x0e0e
0212 #define  COMM_FACE_DET_OSD_OFF          0x0000
0213 #define  COMM_FACE_DET_OSD_ON           0x0001
0214 
0215 #define COMM_AE_CON             0x0c00
0216 #define  COMM_AE_STOP               0x0000 /* lock */
0217 #define  COMM_AE_START              0x0001 /* unlock */
0218 
0219 #define COMM_ISO                0x0c02
0220 #define  COMM_ISO_AUTO              0x0000
0221 #define  COMM_ISO_100               0x0001
0222 #define  COMM_ISO_200               0x0002
0223 #define  COMM_ISO_400               0x0003
0224 #define  COMM_ISO_800               0x0004
0225 #define  COMM_ISO_SPORTS            0x0005
0226 #define  COMM_ISO_NIGHT             0x0006
0227 #define  COMM_ISO_INDOOR            0x0007
0228 
0229 /* 0x00000 (-2.0 EV)...0x0008 (2.0 EV), 0.5EV step */
0230 #define COMM_EV                 0x0c04
0231 
0232 #define COMM_METERING               0x0c06
0233 #define  COMM_METERING_CENTER           0x0000
0234 #define  COMM_METERING_SPOT         0x0001
0235 #define  COMM_METERING_AVERAGE          0x0002
0236 #define  COMM_METERING_SMART            0x0003
0237 
0238 #define COMM_WDR                0x0c08
0239 #define  COMM_WDR_OFF               0x0000
0240 #define  COMM_WDR_ON                0x0001
0241 
0242 #define COMM_FLICKER_MODE           0x0c12
0243 #define  COMM_FLICKER_NONE          0x0000
0244 #define  COMM_FLICKER_MANUAL_50HZ       0x0001
0245 #define  COMM_FLICKER_MANUAL_60HZ       0x0002
0246 #define  COMM_FLICKER_AUTO          0x0003
0247 #define  COMM_FLICKER_AUTO_50HZ         0x0004
0248 #define  COMM_FLICKER_AUTO_60HZ         0x0005
0249 
0250 #define COMM_FRAME_RATE             0x0c1e
0251 #define  COMM_FRAME_RATE_AUTO_SET       0x0000
0252 #define  COMM_FRAME_RATE_FIXED_30FPS        0x0002
0253 #define  COMM_FRAME_RATE_FIXED_20FPS        0x0003
0254 #define  COMM_FRAME_RATE_FIXED_15FPS        0x0004
0255 #define  COMM_FRAME_RATE_FIXED_60FPS        0x0007
0256 #define  COMM_FRAME_RATE_FIXED_120FPS       0x0008
0257 #define  COMM_FRAME_RATE_FIXED_7FPS     0x0009
0258 #define  COMM_FRAME_RATE_FIXED_10FPS        0x000a
0259 #define  COMM_FRAME_RATE_FIXED_90FPS        0x000b
0260 #define  COMM_FRAME_RATE_ANTI_SHAKE     0x0013
0261 
0262 /* 0x0000...0x0004 -> sharpness: 0, 1, 2, -1, -2 */
0263 #define COMM_SHARPNESS              0x0c14
0264 
0265 /* 0x0000...0x0004 -> saturation: 0, 1, 2, -1, -2 */
0266 #define COMM_SATURATION             0x0c16
0267 
0268 /* 0x0000...0x0004 -> contrast: 0, 1, 2, -1, -2 */
0269 #define COMM_CONTRAST               0x0c18
0270 
0271 #define COMM_SCENE_MODE             0x0c1a
0272 #define  COMM_SCENE_MODE_NONE           0x0000
0273 #define  COMM_SCENE_MODE_PORTRAIT       0x0001
0274 #define  COMM_SCENE_MODE_LANDSCAPE      0x0002
0275 #define  COMM_SCENE_MODE_SPORTS         0x0003
0276 #define  COMM_SCENE_MODE_INDOOR         0x0004
0277 #define  COMM_SCENE_MODE_BEACH          0x0005
0278 #define  COMM_SCENE_MODE_SUNSET         0x0006
0279 #define  COMM_SCENE_MODE_DAWN           0x0007
0280 #define  COMM_SCENE_MODE_FALL           0x0008
0281 #define  COMM_SCENE_MODE_NIGHT          0x0009
0282 #define  COMM_SCENE_MODE_AGAINST_LIGHT      0x000a
0283 #define  COMM_SCENE_MODE_FIRE           0x000b
0284 #define  COMM_SCENE_MODE_TEXT           0x000c
0285 #define  COMM_SCENE_MODE_CANDLE         0x000d
0286 
0287 #define COMM_AE_AUTO_BRACKET            0x0b14
0288 #define  COMM_AE_AUTO_BRAKET_EV05       0x0080
0289 #define  COMM_AE_AUTO_BRAKET_EV10       0x0100
0290 #define  COMM_AE_AUTO_BRAKET_EV15       0x0180
0291 #define  COMM_AE_AUTO_BRAKET_EV20       0x0200
0292 
0293 #define COMM_SENSOR_STREAMING           0x090a
0294 #define  COMM_SENSOR_STREAMING_OFF      0x0000
0295 #define  COMM_SENSOR_STREAMING_ON       0x0001
0296 
0297 #define COMM_AWB_MODE               0x0d02
0298 #define  COMM_AWB_MODE_INCANDESCENT     0x0000
0299 #define  COMM_AWB_MODE_FLUORESCENT1     0x0001
0300 #define  COMM_AWB_MODE_FLUORESCENT2     0x0002
0301 #define  COMM_AWB_MODE_DAYLIGHT         0x0003
0302 #define  COMM_AWB_MODE_CLOUDY           0x0004
0303 #define  COMM_AWB_MODE_AUTO         0x0005
0304 
0305 #define COMM_AWB_CON                0x0d00
0306 #define  COMM_AWB_STOP              0x0000 /* lock */
0307 #define  COMM_AWB_START             0x0001 /* unlock */
0308 
0309 #define COMM_FW_UPDATE              0x0906
0310 #define  COMM_FW_UPDATE_NOT_READY       0x0000
0311 #define  COMM_FW_UPDATE_SUCCESS         0x0005
0312 #define  COMM_FW_UPDATE_FAIL            0x0007
0313 #define  COMM_FW_UPDATE_BUSY            0xffff
0314 
0315 
0316 #define S5C73M3_MAX_SUPPLIES            6
0317 #define S5C73M3_DEFAULT_MCLK_FREQ       24000000U
0318 
0319 struct s5c73m3_ctrls {
0320     struct v4l2_ctrl_handler handler;
0321     struct {
0322         /* exposure/exposure bias cluster */
0323         struct v4l2_ctrl *auto_exposure;
0324         struct v4l2_ctrl *exposure_bias;
0325         struct v4l2_ctrl *exposure_metering;
0326     };
0327     struct {
0328         /* iso/auto iso cluster */
0329         struct v4l2_ctrl *auto_iso;
0330         struct v4l2_ctrl *iso;
0331     };
0332     struct v4l2_ctrl *auto_wb;
0333     struct {
0334         /* continuous auto focus/auto focus cluster */
0335         struct v4l2_ctrl *focus_auto;
0336         struct v4l2_ctrl *af_start;
0337         struct v4l2_ctrl *af_stop;
0338         struct v4l2_ctrl *af_status;
0339         struct v4l2_ctrl *af_distance;
0340     };
0341 
0342     struct v4l2_ctrl *aaa_lock;
0343     struct v4l2_ctrl *colorfx;
0344     struct v4l2_ctrl *contrast;
0345     struct v4l2_ctrl *saturation;
0346     struct v4l2_ctrl *sharpness;
0347     struct v4l2_ctrl *zoom;
0348     struct v4l2_ctrl *wdr;
0349     struct v4l2_ctrl *stabilization;
0350     struct v4l2_ctrl *jpeg_quality;
0351     struct v4l2_ctrl *scene_mode;
0352 };
0353 
0354 enum s5c73m3_gpio_id {
0355     STBY,
0356     RSET,
0357     GPIO_NUM,
0358 };
0359 
0360 enum s5c73m3_resolution_types {
0361     RES_ISP,
0362     RES_JPEG,
0363 };
0364 
0365 struct s5c73m3_interval {
0366     u16 fps_reg;
0367     struct v4l2_fract interval;
0368     /* Maximum rectangle for the interval */
0369     struct v4l2_frmsize_discrete size;
0370 };
0371 
0372 struct s5c73m3 {
0373     struct v4l2_subdev sensor_sd;
0374     struct media_pad sensor_pads[S5C73M3_NUM_PADS];
0375 
0376     struct v4l2_subdev oif_sd;
0377     struct media_pad oif_pads[OIF_NUM_PADS];
0378 
0379     struct spi_driver spidrv;
0380     struct spi_device *spi_dev;
0381     struct i2c_client *i2c_client;
0382     u32 i2c_write_address;
0383     u32 i2c_read_address;
0384 
0385     struct regulator_bulk_data supplies[S5C73M3_MAX_SUPPLIES];
0386     struct s5c73m3_gpio gpio[GPIO_NUM];
0387 
0388     struct clk *clock;
0389 
0390     /* External master clock frequency */
0391     u32 mclk_frequency;
0392     /* Video bus type - MIPI-CSI2/parallel */
0393     enum v4l2_mbus_type bus_type;
0394 
0395     const struct s5c73m3_frame_size *sensor_pix_size[2];
0396     const struct s5c73m3_frame_size *oif_pix_size[2];
0397     u32 mbus_code;
0398 
0399     const struct s5c73m3_interval *fiv;
0400 
0401     struct v4l2_mbus_frame_desc frame_desc;
0402     /* protects the struct members below */
0403     struct mutex lock;
0404 
0405     struct s5c73m3_ctrls ctrls;
0406 
0407     u8 streaming:1;
0408     u8 apply_fmt:1;
0409     u8 apply_fiv:1;
0410     u8 isp_ready:1;
0411 
0412     short power;
0413 
0414     char sensor_fw[S5C73M3_SENSOR_FW_LEN + 2];
0415     char sensor_type[S5C73M3_SENSOR_TYPE_LEN + 2];
0416     char fw_file_version[2];
0417     unsigned int fw_size;
0418 };
0419 
0420 struct s5c73m3_frame_size {
0421     u32 width;
0422     u32 height;
0423     u8 reg_val;
0424 };
0425 
0426 extern int s5c73m3_dbg;
0427 
0428 int s5c73m3_register_spi_driver(struct s5c73m3 *state);
0429 void s5c73m3_unregister_spi_driver(struct s5c73m3 *state);
0430 int s5c73m3_spi_write(struct s5c73m3 *state, const void *addr,
0431               const unsigned int len, const unsigned int tx_size);
0432 int s5c73m3_spi_read(struct s5c73m3 *state, void *addr,
0433               const unsigned int len, const unsigned int tx_size);
0434 
0435 int s5c73m3_read(struct s5c73m3 *state, u32 addr, u16 *data);
0436 int s5c73m3_write(struct s5c73m3 *state, u32 addr, u16 data);
0437 int s5c73m3_isp_command(struct s5c73m3 *state, u16 command, u16 data);
0438 int s5c73m3_init_controls(struct s5c73m3 *state);
0439 
0440 static inline struct v4l2_subdev *ctrl_to_sensor_sd(struct v4l2_ctrl *ctrl)
0441 {
0442     return &container_of(ctrl->handler, struct s5c73m3,
0443                  ctrls.handler)->sensor_sd;
0444 }
0445 
0446 static inline struct s5c73m3 *sensor_sd_to_s5c73m3(struct v4l2_subdev *sd)
0447 {
0448     return container_of(sd, struct s5c73m3, sensor_sd);
0449 }
0450 
0451 static inline struct s5c73m3 *oif_sd_to_s5c73m3(struct v4l2_subdev *sd)
0452 {
0453     return container_of(sd, struct s5c73m3, oif_sd);
0454 }
0455 #endif  /* S5C73M3_H_ */