Exemple #1
0
static ssize_t g19_name_store(struct device *dev,
                              struct device_attribute *attr,
                              const char *buf, size_t count)
{
	unsigned long irq_flags;
	struct gcommon_data *gdata = dev_get_gdata(dev);
	size_t limit = count;
	char *end;

	spin_lock_irqsave(&gdata->lock, irq_flags);

	if (gdata->name != NULL) {
		kfree(gdata->name);
		gdata->name = NULL;
	}

	end = strpbrk(buf, "\n\r");
	if (end != NULL)
		limit = end - buf;

	if (end != buf) {

		if (limit > 100)
			limit = 100;

		gdata->name = kzalloc(limit+1, GFP_ATOMIC);

		strncpy(gdata->name, buf, limit);
	}

	spin_unlock_irqrestore(&gdata->lock, irq_flags);

	return count;
}
Exemple #2
0
static int g15_raw_event(struct hid_device *hdev,
			 struct hid_report *report,
			 u8 *raw_data, int size)
{
	/*
	* On initialization receive a 258 byte message with
	* data = 6 0 255 255 255 255 255 255 255 255 ...
	*/
	unsigned long irq_flags;
	struct gcommon_data *gdata = dev_get_gdata(&hdev->dev);
	struct g15_data *g15data = gdata->data;

	spin_lock_irqsave(&gdata->lock, irq_flags);

	if (unlikely(g15data->need_reset)) {
		g15_msg_send(hdev, 4, ~g15data->led, 0);
		g15data->need_reset = 0;
		spin_unlock_irqrestore(&gdata->lock, irq_flags);
		return 1;
	}

	if (unlikely(g15data->ready_stages != G15_READY_STAGE_3)) {
		switch (report->id) {
		case 6:
			if (!(g15data->ready_stages & G15_READY_SUBSTAGE_1))
				g15data->ready_stages |= G15_READY_SUBSTAGE_1;
			else if (g15data->ready_stages & G15_READY_SUBSTAGE_4 &&
				 !(g15data->ready_stages & G15_READY_SUBSTAGE_5)
				)
				g15data->ready_stages |= G15_READY_SUBSTAGE_5;
			else if (g15data->ready_stages & G15_READY_SUBSTAGE_6 &&
				 raw_data[1] >= 0x80)
				g15data->ready_stages |= G15_READY_SUBSTAGE_7;
			break;
		case 1:
			if (!(g15data->ready_stages & G15_READY_SUBSTAGE_2))
				g15data->ready_stages |= G15_READY_SUBSTAGE_2;
			else
				g15data->ready_stages |= G15_READY_SUBSTAGE_3;
			break;
		}

		if (g15data->ready_stages == G15_READY_STAGE_1 ||
		    g15data->ready_stages == G15_READY_STAGE_2 ||
		    g15data->ready_stages == G15_READY_STAGE_3)
			complete_all(&g15data->ready);

		spin_unlock_irqrestore(&gdata->lock, irq_flags);
		return 1;
	}

	spin_unlock_irqrestore(&gdata->lock, irq_flags);

	if (likely(report->id == 2)) {
		g15_raw_event_process_input(hdev, gdata, raw_data);
		return 1;
	}

	return 0;
}
Exemple #3
0
ssize_t gcore_minor_show(struct device *dev,
			 struct device_attribute *attr,
			 char *buf)
{
	struct gcore_data *gdata = dev_get_gdata(dev);

	return sprintf(buf, "%d\n", gdata->hdev->minor);
}
Exemple #4
0
ssize_t gcore_name_show(struct device *dev,
			struct device_attribute *attr,
			char *buf)
{
	unsigned long irq_flags;
	struct gcore_data *gdata = dev_get_gdata(dev);
	int result;

	spin_lock_irqsave(&gdata->lock, irq_flags);
	result = sprintf(buf, "%s", gdata->name);
	spin_unlock_irqrestore(&gdata->lock, irq_flags);

	return result;
}
Exemple #5
0
static ssize_t g19_name_show(struct device *dev,
                             struct device_attribute *attr,
                             char *buf)
{
	unsigned long irq_flags;
	struct gcommon_data *gdata = dev_get_gdata(dev);
	int result;

	if (gdata->name == NULL) {
		buf[0] = 0x00;
		return 1;
	}

	spin_lock_irqsave(&gdata->lock, irq_flags);
	result = sprintf(buf, "%s", gdata->name);
	spin_unlock_irqrestore(&gdata->lock, irq_flags);

	return result;
}