Пример #1
0
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;
}
Пример #4
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;
}
Пример #5
0
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;
}
Пример #6
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);
}