static int gnss_open()

in core.c [36:66]


static int gnss_open(struct inode *inode, struct file *file)
{
	struct gnss_device *gdev;
	int ret = 0;

	gdev = container_of(inode->i_cdev, struct gnss_device, cdev);

	get_device(&gdev->dev);

	stream_open(inode, file);
	file->private_data = gdev;

	down_write(&gdev->rwsem);
	if (gdev->disconnected) {
		ret = -ENODEV;
		goto unlock;
	}

	if (gdev->count++ == 0) {
		ret = gdev->ops->open(gdev);
		if (ret)
			gdev->count--;
	}
unlock:
	up_write(&gdev->rwsem);

	if (ret)
		put_device(&gdev->dev);

	return ret;
}