usb: dwc3: add functions to set force mode
[firefly-linux-kernel-4.4.55.git] / drivers / misc / tdsc8800.c
index d4ffb891cac31d8c01b746d7b00fdb6c3a84a32e..6db48f071b767bba138fd630fc47d5c4f1f6c2df 100755 (executable)
@@ -31,16 +31,15 @@ MODULE_LICENSE("GPL");
 #define MODEMDBG(fmt,argss...)
 #endif
 
-static bool wakelock_inited;
 #define SLEEP 1
 #define READY 0
+#define RESET 1
 struct rk2818_23d_data *gpdata = NULL;
 
 
 int modem_poweron_off(int on_off)
 {
        struct rk2818_23d_data *pdata = gpdata;
-       int result, error = 0, irq = 0; 
        
        if(on_off)
        {
@@ -53,18 +52,12 @@ int modem_poweron_off(int on_off)
                printk("tdsc8800_poweroff\n");
                gpio_set_value(pdata->bp_power, pdata->bp_power_active_low? GPIO_LOW:GPIO_HIGH);
        }
+       return 0;
 }
 static int tdsc8800_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("tdsc8800_open\n");
-
-       int ret = 0;
        modem_poweron_off(1);
-       device_init_wakeup(&pdev, 1);
+       device_init_wakeup(gpdata->dev, 1);
 
        return 0;
 }
@@ -72,11 +65,22 @@ static int tdsc8800_open(struct inode *inode, struct file *file)
 static int tdsc8800_release(struct inode *inode, struct file *file)
 {
        MODEMDBG("tdsc8800_release\n");
+       modem_poweron_off(0);
 
        return 0;
 }
-static int tdsc8800_ioctl(struct inode *inode,struct file *file, unsigned int cmd, unsigned long arg)
+static long  tdsc8800_ioctl(struct file *file, unsigned int a, unsigned long b)
 {
+       switch(a){
+               case RESET:
+                       modem_poweron_off(0);
+                       msleep(1000);
+                       modem_poweron_off(1);
+                       break;
+               default:
+                       MODEMDBG("cmd error !!!\n");
+                       break;
+       }
        return 0;
 }
 
@@ -97,12 +101,13 @@ static int tdsc8800_probe(struct platform_device *pdev)
 {
        struct rk2818_23d_data *pdata = gpdata = pdev->dev.platform_data;
        struct modem_dev *tdsc8800_data = NULL;
-       int result, error = 0, irq = 0; 
+       int result = 0; 
        
        MODEMDBG("tdsc8800_probe\n");
 
        //pdata->io_init();
 
+       pdata->dev = &pdev->dev;
        tdsc8800_data = kzalloc(sizeof(struct modem_dev), GFP_KERNEL);
        if(NULL == tdsc8800_data)
        {
@@ -120,7 +125,7 @@ static int tdsc8800_probe(struct platform_device *pdev)
        
         gpio_direction_output(pdata->bp_power, GPIO_LOW);
 
-       gpio_set_value(pdata->bp_power, pdata->bp_reset_active_low? GPIO_LOW:GPIO_HIGH);
+       gpio_set_value(pdata->bp_power, pdata->bp_power_active_low? GPIO_LOW:GPIO_HIGH);
        result = misc_register(&tdsc8800_misc);
        if(result)
        {
@@ -133,7 +138,6 @@ err1:
        gpio_free(pdata->bp_power);
 err6:
        kfree(tdsc8800_data);
-ret:
        return result;
 }
 
@@ -172,8 +176,9 @@ static struct platform_driver tdsc8800_driver = {
 
 static int __init tdsc8800_init(void)
 {
-       MODEMDBG("tdsc8800_init ret=%d\n");
-       return platform_driver_register(&tdsc8800_driver);
+       int ret = platform_driver_register(&tdsc8800_driver);
+       MODEMDBG("tdsc8800_init ret=%d\n",ret);
+       return ret;
 }
 
 static void __exit tdsc8800_exit(void)