12 #include <linux/kernel.h>
13 #include <linux/module.h>
14 #include <linux/i2c.h>
18 #include <linux/slab.h>
19 #include <linux/videodev2.h>
23 #include <linux/device.h>
28 #include <linux/list.h>
57 static struct mutex mmpcam_devices_lock;
62 list_add(&cam->
devlist, &mmpcam_devices);
84 if (cam->
pdev == pdev) {
102 #define CPU_SUBSYS_PMU_BASE 0xd4282800
103 #define REG_CCIC_DCGCR 0x28
104 #define REG_CCIC_CRCR 0x50
109 static void mmpcam_power_up_ctlr(
struct mmp_camera *cam)
123 mmpcam_power_up_ctlr(cam);
128 pdata = cam->
pdev->dev.platform_data;
131 mcam_reg_clear_bit(mcam,
REG_CTRL1, 0x10000000);
138 static void mmpcam_power_down(
struct mcam_camera *mcam)
150 pdata = cam->
pdev->dev.platform_data;
159 unsigned int irqs, handled;
218 dev_err(&pdev->
dev,
"power MMIO ioremap fail\n");
226 pdata = pdev->
dev.platform_data;
238 dev_err(&pdev->
dev,
"Can't get sensor power gpio %d",
245 dev_err(&pdev->
dev,
"Can't get sensor reset gpio %d",
253 mmpcam_power_up(mcam);
270 mmpcam_add_device(cam);
277 mmpcam_power_down(mcam);
291 static int mmpcam_remove(
struct mmp_camera *cam)
296 mmpcam_remove_device(cam);
299 mmpcam_power_down(mcam);
300 pdata = cam->
pdev->dev.platform_data;
311 struct mmp_camera *cam = mmpcam_find_device(pdev);
315 return mmpcam_remove(cam);
325 struct mmp_camera *cam = mmpcam_find_device(pdev);
329 mccic_suspend(&cam->
mcam);
335 struct mmp_camera *cam = mmpcam_find_device(pdev);
342 mmpcam_power_up_ctlr(cam);
343 return mccic_resume(&cam->
mcam);
350 .probe = mmpcam_probe,
351 .remove = mmpcam_platform_remove,
353 .suspend = mmpcam_suspend,
354 .resume = mmpcam_resume,
357 .name =
"mmp-camera",
363 static int __init mmpcam_init_module(
void)
369 static void __exit mmpcam_exit_module(
void)
375 if (!list_empty(&mmpcam_devices))