static int __devexit gps_remove(struct platform_device *pdev) { struct gps_data *data = dev_get_drvdata(&pdev->dev); if (data->enabled) gps_power(0); sysfs_remove_group(&pdev->dev.kobj, &gps_attribute_group); kfree(data); return 0; }
static int gpslib_stop() { LOGV("GPS stop"); GpsStatus *stat = malloc(sizeof (GpsStatus)); stat->size = sizeof (GpsStatus); stat->status = GPS_STATUS_SESSION_END; adamGpsCallbacks->create_thread_cb("adamgps-status", updateStatus, stat); pthread_mutex_lock(&mutGPS); gpsOn = 0; gps_power(gpsOn); pthread_mutex_unlock(&mutGPS); return 0; }
static int gpslib_start() { LOGV("Gps start"); GpsStatus *stat = malloc(sizeof (GpsStatus)); stat->size = sizeof (GpsStatus); stat->status = GPS_STATUS_SESSION_BEGIN; adamGpsCallbacks->create_thread_cb("adamgps-status", updateStatus, stat); pthread_mutex_lock(&mutGPS); gpsOn = 1; gps_power(gpsOn); pthread_mutex_unlock(&mutGPS); pthread_create(&NMEAThread, NULL, doGPS, NULL); return 0; }
static ssize_t gps_enable_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { unsigned long enable = simple_strtoul(buf, NULL, 10); struct gps_data *data = dev_get_drvdata(dev); pr_debug("%s():enable %ld.\n", __FUNCTION__, enable); if (enable != data->enabled) { int ret = gps_power(enable); if (ret) { pr_err("%s()->%d:set power %ld fail !!\n", __FUNCTION__, __LINE__, enable); return -1; } data->enabled = enable; } return count; }
static int __devinit gps_probe(struct platform_device *pdev) { int ret; struct gps_data *data; data = kzalloc(sizeof(struct gps_data), GFP_KERNEL); if(!data) { pr_err("%s()->%d:kzalloc fail !!\n", __FUNCTION__, __LINE__); return -ENOMEM; } dev_set_drvdata(&pdev->dev, data); ret = sysfs_create_group(&pdev->dev.kobj, &gps_attribute_group); if (ret < 0) { pr_err("%s()->%d:sys create group fail !!\n", __FUNCTION__, __LINE__); kfree(data); return ret; } #ifdef CONFIG_HAS_EARLYSUSPEND data->early_suspend.suspend = gps_early_suspend; data->early_suspend.resume = gps_late_resume; data->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN; register_early_suspend(&data->early_suspend); #endif if(mx_is_factory_test_mode(MX_FACTORY_TEST_BT)) { pr_info("%s():now is in factory test mode!\n", __func__); if (!gps_power(1)) data->enabled = 1; } pr_info("gps successfully probed!\n"); return 0; }
static void gps_early_suspend(struct early_suspend *h) { struct gps_data *data = container_of(h, struct gps_data, early_suspend); if (data->enabled) gps_power(0); }