Merge branch linux-linaro-lsk-v3.10-android
[firefly-linux-kernel-4.4.55.git] / drivers / misc / mtk23d.c
index 14fdcdbe50d228479da6377e5326e516ec0138c1..4ea26fc380811ee8d694a7d956c89c4a204d08f6 100755 (executable)
@@ -23,6 +23,7 @@
 #include <linux/mtk23d.h>
 #include <linux/wakelock.h>
 #include "../mtd/rknand/api_flash.h"
+#include <linux/slab.h>
 
 MODULE_LICENSE("GPL");
 
@@ -155,7 +156,7 @@ static int rk29_gpio_to_uart(int uart_id)
 
 }
 
-static int  get_bp_statue(struct platform_device *pdev)
+/*static int  get_bp_statue(struct platform_device *pdev)
 {
        struct rk2818_23d_data *pdata = pdev->dev.platform_data;
        
@@ -163,7 +164,7 @@ static int  get_bp_statue(struct platform_device *pdev)
                return SLEEP;
        else
                return READY;
-}
+}*/
 static void ap_sleep(struct platform_device *pdev)
 {
        struct rk2818_23d_data *pdata = pdev->dev.platform_data;
@@ -182,7 +183,7 @@ static void ap_wakeup(struct platform_device *pdev)
 static void ap_wakeup_bp(struct platform_device *pdev, int wake)//low to wakeup bp
 {
        struct rk2818_23d_data *pdata = pdev->dev.platform_data;
-        struct modem_dev *mt6223d_data = platform_get_drvdata(pdev);
+        //struct modem_dev *mt6223d_data = platform_get_drvdata(pdev);
        MODEMDBG("ap_wakeup_bp\n");
 
        gpio_set_value(pdata->ap_bp_wakeup, wake);  // phc
@@ -191,12 +192,12 @@ static void ap_wakeup_bp(struct platform_device *pdev, int wake)//low to wakeup
 
 static void bpwakeup_work_func_work(struct work_struct *work)
 {
-       struct modem_dev *bdata = container_of(work, struct modem_dev, work);
+       //struct modem_dev *bdata = container_of(work, struct modem_dev, work);
        
        MODEMDBG("%s\n", __FUNCTION__);
        
 }
-/*  */
+/*  
 static irqreturn_t  bpwakeup_work_func(int irq, void *data)
 {
        struct modem_dev *mt6223d_data = (struct modem_dev *)data;
@@ -205,6 +206,8 @@ static irqreturn_t  bpwakeup_work_func(int irq, void *data)
        schedule_work(&mt6223d_data->work);
        return IRQ_HANDLED;
 }
+
+
 static irqreturn_t  bp_apwakeup_work_func(int irq, void *data)
 {
        //struct modem_dev *dev = &mtk23d_misc;
@@ -213,10 +216,11 @@ static irqreturn_t  bp_apwakeup_work_func(int irq, void *data)
        //wake_up_interruptible(&dev->wakeup);
        return IRQ_HANDLED;
 }
+*/
 
 static irqreturn_t BBwakeup_isr(int irq, void *dev_id)
 {
-       struct rk2818_23d_data *pdata = dev_id;
+       //struct rk2818_23d_data *pdata = dev_id;
        
        MODEMDBG("%s \n", __FUNCTION__);
        //if(irq != gpio_to_irq(RK29_PIN1_PC0))
@@ -240,7 +244,7 @@ static irqreturn_t BBwakeup_isr(int irq, void *dev_id)
 int modem_poweron_off(int on_off)
 {
        struct rk2818_23d_data *pdata = gpdata;
-       int result, error = 0, irq = 0; 
+       int  error = 0, irq = 0;        
        
   if(on_off)
        {
@@ -286,27 +290,22 @@ int modem_poweron_off(int on_off)
                        msleep(500);
                        gpio_set_value(pdata->bp_reset, pdata->bp_reset_active_low? GPIO_LOW:GPIO_HIGH); 
   }
+  return 0;
 }
 static int power_on =1;
 static int mtk23d_open(struct inode *inode, struct file *file)
 {
        struct rk2818_23d_data *pdata = gpdata;
-       //struct rk2818_23d_data *pdata = gpdata = pdev->dev.platform_data;
-       struct platform_data *pdev = container_of(pdata, struct device, platform_data);
-
        MODEMDBG("modem_open\n");
 
-       int ret = 0;
        if(power_on)
        {
                power_on = 0;
                modem_poweron_off(1);
        }
-       device_init_wakeup(&pdev, 1);
-
+       device_init_wakeup(pdata->dev, 1);
        return 0;
 }
-
 static int mtk23d_release(struct inode *inode, struct file *file)
 {
        MODEMDBG("mtk23d_release\n");
@@ -318,10 +317,11 @@ static int mtk23d_release(struct inode *inode, struct file *file)
 //extern char imei_value[16]; // phc, no find 'imei_value' in rk29 project
 //char imei_value[16] = {0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5};
 
-static int mtk23d_ioctl(struct inode *inode,struct file *file, unsigned int cmd, unsigned long arg)
+
+static long mtk23d_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 {
        struct rk2818_23d_data *pdata = gpdata;
-       int i,ret;
+       int ret;
        void __user *argp = (void __user *)arg;
        
        char SectorBuffer[512];
@@ -405,7 +405,7 @@ static struct file_operations mtk23d_fops = {
        .owner = THIS_MODULE,
        .open = mtk23d_open,
        .release = mtk23d_release,
-       .ioctl = mtk23d_ioctl
+       .unlocked_ioctl = mtk23d_ioctl
 };
 
 static struct miscdevice mtk23d_misc = {
@@ -418,11 +418,12 @@ static int mtk23d_probe(struct platform_device *pdev)
 {
        struct rk2818_23d_data *pdata = gpdata = pdev->dev.platform_data;
        struct modem_dev *mt6223d_data = NULL;
-       int result, error = 0, irq = 0; 
+       int result=1;   
        
        MODEMDBG("mtk23d_probe\n");
 
        //pdata->io_init();
+       pdata->dev = &pdev->dev;
 
        mt6223d_data = kzalloc(sizeof(struct modem_dev), GFP_KERNEL);
        if(NULL == mt6223d_data)
@@ -492,7 +493,7 @@ static int mtk23d_probe(struct platform_device *pdev)
 #endif 
 
        INIT_WORK(&mt6223d_data->work, bpwakeup_work_func_work);
-       init_MUTEX(&pdata->power_sem);
+       sema_init(&pdata->power_sem,1);
        power_on = 1;
        result = misc_register(&mtk23d_misc);
        if(result)
@@ -517,13 +518,13 @@ err5:
        gpio_free(pdata->bp_statue);
 err6:
        kfree(mt6223d_data);
-ret:
+
        return result;
 }
 
-int mtk23d_suspend(struct platform_device *pdev)
+int mtk23d_suspend(struct platform_device *pdev, pm_message_t state)
 {
-       int irq, error;
+       int irq;
        struct rk2818_23d_data *pdata = pdev->dev.platform_data;
        
        MODEMDBG("%s \n", __FUNCTION__);
@@ -567,7 +568,7 @@ int mtk23d_resume(struct platform_device *pdev)
        return 0;
 }
 
-void mtk23d_shutdown(struct platform_device *pdev, pm_message_t state)
+void mtk23d_shutdown(struct platform_device *pdev)
 {
        struct rk2818_23d_data *pdata = pdev->dev.platform_data;
        struct modem_dev *mt6223d_data = platform_get_drvdata(pdev);
@@ -597,9 +598,10 @@ static struct platform_driver mtk23d_driver = {
        },
 };
 
+
 static int __init mtk23d_init(void)
 {
-       MODEMDBG("mtk23d_init ret=%d\n");
+       //MODEMDBG("mtk23d_init ret=%d\n");
        return platform_driver_register(&mtk23d_driver);
 }