static ssize_t cradle_sensing_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { int ret = -EINVAL, len = strcspn(buf, " "); if (len > 0 && buf[len] == '\0') len--; if (strncmp(buf, "1", len) == 0) { cradle_set_deskdock(1); ret = size; } else if (strncmp(buf, "0", len) == 0) { cradle_set_deskdock(0); ret = size; } return ret; }
static int __devinit pm8xxx_cradle_probe(struct platform_device *pdev) { int ret; #if defined CONFIG_HALLIC_PEN unsigned int hall_pen_gpio_irq = 0, hall_pouch_gpio_irq = 0; #else #if defined (CONFIG_MACH_MSM8974_T1LTE_GLOBAL_COM) || defined (CONFIG_MACH_MSM8974_T1WIFI_GLOBAL_COM) || defined (CONFIG_MACH_MSM8974_T1WIFIN_GLOBAL_COM) || defined(CONFIG_MACH_MSM8974_T1_ATT) unsigned int hall_pouch_gpio_irq = 0; #else unsigned int hall_camera_gpio_irq = 0, hall_pouch_gpio_irq = 0; #endif #endif struct pm8xxx_cradle_platform_data *pdata; if (pdev->dev.of_node) { pdata = devm_kzalloc(&pdev->dev, sizeof(struct pm8xxx_cradle_platform_data), GFP_KERNEL); if (pdata == NULL) { pr_err("%s: no pdata\n", __func__); return -ENOMEM; } pdev->dev.platform_data = pdata; #if defined(CONFIG_S5717) s5717_parse_dt(&pdev->dev, pdata); #else bu52014hfv_parse_dt(&pdev->dev, pdata); #endif } else { pdata = pdev->dev.platform_data; } if (!pdata) { pr_err("%s: no pdata\n", __func__); return -ENOMEM; } cradle = kzalloc(sizeof(*cradle), GFP_KERNEL); if (!cradle) return -ENOMEM; cradle->pdata = pdata; cradle->sdev.name = "smartcover"; cradle->sdev.print_name = cradle_print_name; cradle->pouch = 0; #if defined CONFIG_HALLIC_PEN cradle->pen = 0; #else #if !defined (CONFIG_MACH_MSM8974_T1LTE_GLOBAL_COM) && !defined (CONFIG_MACH_MSM8974_T1WIFI_GLOBAL_COM) && !defined (CONFIG_MACH_MSM8974_T1WIFIN_GLOBAL_COM) && !defined(CONFIG_MACH_MSM8974_T1_ATT) cradle->camera = 0; #endif #endif spin_lock_init(&cradle->lock); ret = switch_dev_register(&cradle->sdev); if (ret < 0) goto err_switch_dev_register; if (pre_set_flag) { cradle_set_deskdock(pre_set_flag); cradle->state = pre_set_flag; } wake_lock_init(&cradle->wake_lock, WAKE_LOCK_SUSPEND, "hall_ic_wakeups"); INIT_DELAYED_WORK(&cradle->pouch_work, pm8xxx_pouch_work_func); #if defined CONFIG_HALLIC_PEN INIT_DELAYED_WORK(&cradle->pen_work, pm8xxx_pen_work_func); #else #if !defined (CONFIG_MACH_MSM8974_T1LTE_GLOBAL_COM) && !defined (CONFIG_MACH_MSM8974_T1WIFI_GLOBAL_COM) && !defined (CONFIG_MACH_MSM8974_T1WIFIN_GLOBAL_COM) && !defined(CONFIG_MACH_MSM8974_T1_ATT) INIT_DELAYED_WORK(&cradle->camera_work, pm8xxx_camera_work_func); #endif #endif printk("%s : init cradle\n", __func__); /* initialize irq of gpio_hall */ if (cradle->pdata->hallic_pouch_detect_pin > 0) { hall_pouch_gpio_irq = gpio_to_irq(cradle->pdata->hallic_pouch_detect_pin); printk("%s : hall_pouch_gpio_irq = [%d]\n", __func__, hall_pouch_gpio_irq); if (hall_pouch_gpio_irq < 0) { printk("Failed : GPIO TO IRQ \n"); ret = hall_pouch_gpio_irq; goto err_request_irq; } ret = request_irq(hall_pouch_gpio_irq, pm8xxx_pouch_irq_handler, pdata->irq_flags, HALL_IC_DEV_NAME, cradle); if (ret > 0) { printk(KERN_ERR "%s: Can't allocate irq %d, ret %d\n", __func__, hall_pouch_gpio_irq, ret); goto err_request_irq; } if (enable_irq_wake(hall_pouch_gpio_irq) == 0) printk("%s :enable_irq_wake Enable(1)\n",__func__); else printk("%s :enable_irq_wake failed(1)\n",__func__); } #if defined CONFIG_HALLIC_PEN if (cradle->pdata->hallic_pen_detect_pin > 0) { hall_pen_gpio_irq = gpio_to_irq(cradle->pdata->hallic_pen_detect_pin); printk("%s : hall_pen_gpio_irq = [%d]\n", __func__, hall_pen_gpio_irq); if (hall_pen_gpio_irq < 0) { printk("Failed : GPIO TO IRQ \n"); ret = hall_pen_gpio_irq; goto err_request_irq; } ret = request_irq(hall_pen_gpio_irq, pm8xxx_pen_irq_handler, pdata->irq_flags, HALL_IC_DEV_NAME, cradle); if (ret > 0) { printk(KERN_ERR "%s: Can't allocate irq %d, ret %d\n", __func__, hall_pen_gpio_irq, ret); goto err_request_irq; } if (enable_irq_wake(hall_pen_gpio_irq) == 0) printk("%s :enable_irq_wake Enable(2)\n",__func__); else printk("%s :enable_irq_wake failed(2)\n",__func__); } #else #if !defined (CONFIG_MACH_MSM8974_T1LTE_GLOBAL_COM) && !defined (CONFIG_MACH_MSM8974_T1WIFI_GLOBAL_COM) && !defined (CONFIG_MACH_MSM8974_T1WIFIN_GLOBAL_COM) && !defined(CONFIG_MACH_MSM8974_T1_ATT) if (cradle->pdata->hallic_camera_detect_pin > 0) { hall_camera_gpio_irq = gpio_to_irq(cradle->pdata->hallic_camera_detect_pin); printk("%s : hall_camera_gpio_irq = [%d]\n", __func__, hall_camera_gpio_irq); if (hall_camera_gpio_irq < 0) { printk("Failed : GPIO TO IRQ \n"); ret = hall_camera_gpio_irq; goto err_request_irq; } ret = request_irq(hall_camera_gpio_irq, pm8xxx_camera_irq_handler, pdata->irq_flags, HALL_IC_DEV_NAME, cradle); if (ret > 0) { printk(KERN_ERR "%s: Can't allocate irq %d, ret %d\n", __func__, hall_camera_gpio_irq, ret); goto err_request_irq; } if (enable_irq_wake(hall_camera_gpio_irq) == 0) printk("%s :enable_irq_wake Enable(2)\n",__func__); else printk("%s :enable_irq_wake failed(2)\n",__func__); } #endif #endif printk("%s : pdata->irq_flags = [%d]\n", __func__,(int)pdata->irq_flags); printk("%s :boot_cradle_det_func START\n",__func__); boot_cradle_det_func(); ret = device_create_file(&pdev->dev, &cradle_sensing_attr); if (ret) goto err_request_irq; if (cradle->pdata->hallic_pouch_detect_pin > 0) { ret = device_create_file(&pdev->dev, &cradle_pouch_attr); if (ret) goto err_request_irq; } #if defined CONFIG_HALLIC_PEN if (cradle->pdata->hallic_pen_detect_pin > 0) { ret = device_create_file(&pdev->dev, &cradle_pen_attr); if (ret) goto err_request_irq; } #else #if !defined (CONFIG_MACH_MSM8974_T1LTE_GLOBAL_COM) && !defined (CONFIG_MACH_MSM8974_T1WIFI_GLOBAL_COM) && !defined (CONFIG_MACH_MSM8974_T1WIFIN_GLOBAL_COM) && !defined(CONFIG_MACH_MSM8974_T1_ATT) if (cradle->pdata->hallic_camera_detect_pin > 0) { ret = device_create_file(&pdev->dev, &cradle_camera_attr); if (ret) goto err_request_irq; } #endif #endif platform_set_drvdata(pdev, cradle); return 0; err_request_irq: if (hall_pouch_gpio_irq) free_irq(hall_pouch_gpio_irq, 0); #if defined CONFIG_HALLIC_PEN if (hall_pen_gpio_irq) free_irq(hall_pen_gpio_irq, 0); #else #if !defined (CONFIG_MACH_MSM8974_T1LTE_GLOBAL_COM) && !defined (CONFIG_MACH_MSM8974_T1WIFI_GLOBAL_COM) && !defined (CONFIG_MACH_MSM8974_T1WIFIN_GLOBAL_COM) && !defined(CONFIG_MACH_MSM8974_T1_ATT) if (hall_camera_gpio_irq) free_irq(hall_camera_gpio_irq, 0); #endif #endif err_switch_dev_register: switch_dev_unregister(&cradle->sdev); kfree(cradle); return ret; }
static int __devinit pm8xxx_cradle_probe(struct platform_device *pdev) #if 1 { int ret, i; unsigned int hall_gpio_irq; const struct pm8xxx_cradle_platform_data *pdata = pdev->dev.platform_data; if (!pdata) return -EINVAL; cradle = kzalloc(sizeof(*cradle), GFP_KERNEL); if (!cradle) return -ENOMEM; cradle->pdata = pdata; cradle->sdev.name = "dock"; cradle->sdev.print_name = cradle_print_name; cradle->pouch = cradle->carkit = 0; spin_lock_init(&cradle->lock); ret = switch_dev_register(&cradle->sdev); if (ret < 0) goto err_switch_dev_register; if (pre_set_flag) { cradle_set_deskdock(pre_set_flag); cradle->state = pre_set_flag; } INIT_WORK(&cradle->work, pm8xxx_cradle_work_func); printk("%s : init cradle\n", __func__); /* initialize irq of gpio_hall */ hall_gpio_irq = gpio_to_irq(cradle->pdata->pouch_detect_pin); printk("%s : hall_gpio_irq = [%d]\n", __func__,hall_gpio_irq); if (hall_gpio_irq < 0) { printk("Failed : GPIO TO IRQ \n"); ret = hall_gpio_irq; goto err_request_irq; } printk("%s : pdata->irq_flags = [%d]\n", __func__,(int)pdata->irq_flags); ret = request_irq(hall_gpio_irq, pm8xxx_pouch_irq_handler, pdata->irq_flags, HALL_IC_DEV_NAME, cradle); if (ret > 0) { printk(KERN_ERR "%s: Can't allocate irq %d, ret %d\n", __func__, hall_gpio_irq, ret); goto err_request_irq; } printk("%s : enable_irq_wake \n", __func__); if (enable_irq_wake(hall_gpio_irq) == 0) printk("%s :enable_irq_wake Enable\n",__func__); else printk("%s :enable_irq_wake failed\n",__func__); printk("%s :boot_cradle_det_func START\n",__func__); boot_cradle_det_func(); for (i = 0; i < ARRAY_SIZE(cradle_device_attrs); i++) { ret = device_create_file(&pdev->dev, &cradle_device_attrs[i]); if (ret){ goto err_request_irq; } } platform_set_drvdata(pdev, cradle); return 0; err_request_irq: if (hall_gpio_irq) free_irq(hall_gpio_irq, 0); err_switch_dev_register: switch_dev_unregister(&cradle->sdev); kfree(cradle); return ret; }
static int __devinit pm8xxx_cradle_probe(struct platform_device *pdev) { int ret, i; const struct pm8xxx_cradle_platform_data *pdata = pdev->dev.platform_data; if (!pdata) return -EINVAL; cradle = kzalloc(sizeof(*cradle), GFP_KERNEL); if (!cradle) return -ENOMEM; cradle->pdata = pdata; cradle->sdev.name = "dock"; cradle->sdev.print_name = cradle_print_name; cradle->pouch = cradle->carkit = 0; spin_lock_init(&cradle->lock); ret = switch_dev_register(&cradle->sdev); if (ret < 0) goto err_switch_dev_register; if (pre_set_flag) { cradle_set_deskdock(pre_set_flag); cradle->state = pre_set_flag; } INIT_WORK(&cradle->work, pm8xxx_cradle_work_func); printk("%s : init cradle\n", __func__); if (pdata->carkit_irq) { ret = request_irq(pdata->carkit_irq, pm8xxx_carkit_irq_handler, pdata->irq_flags, PM8XXX_CRADLE_DEV_NAME, cradle); if (ret > 0) { printk(KERN_ERR "%s: Can't allocate irq %d, ret %d\n", __func__, pdata->carkit_irq, ret); goto err_request_irq; } } if (pdata->pouch_irq) { ret = request_irq(pdata->pouch_irq, pm8xxx_pouch_irq_handler, pdata->irq_flags, PM8XXX_CRADLE_DEV_NAME, cradle); if (ret > 0) { printk(KERN_ERR "%s: Can't allocate irq %d, ret %d\n", __func__, pdata->pouch_irq, ret); goto err_request_irq; } } for (i = 0; i < ARRAY_SIZE(cradle_device_attrs); i++) { ret = device_create_file(&pdev->dev, &cradle_device_attrs[i]); if (ret) goto err_request_irq; } platform_set_drvdata(pdev, cradle); return 0; err_request_irq: if (pdata->carkit_irq) free_irq(pdata->carkit_irq, 0); if (pdata->pouch_irq) free_irq(pdata->pouch_irq, 0); err_switch_dev_register: switch_dev_unregister(&cradle->sdev); kfree(cradle); return ret; }