Δημοσιεύτηκε: 06 Ιαν 2016, 21:52
από George0k00
Δεν ξέρω αν μας βοηθάει αλλά έκανα την εξής κίνηση: Το laptop χρησιμοποιεί το module acer_wmi και πιθανόν να βρίσκεται εκεί κώδικας για accelerometer της acer. Και από το /linux-4.3.3/drivers/platform/x86/ του πυρήνα linux πήρα τον κώδικα acer_wmi.c Ctrl + F ψάχνω για accelerometer και ιδού ένα μέρος
Κώδικας: Επιλογή όλων
/*
* Accelerometer device
*/
static acpi_handle gsensor_handle;

static int acer_gsensor_init(void)
{
acpi_status status;
struct acpi_buffer output;
union acpi_object out_obj;

output.length = sizeof(out_obj);
output.pointer = &out_obj;
status = acpi_evaluate_object(gsensor_handle, "_INI", NULL, &output);
if (ACPI_FAILURE(status))
return -1;

return 0;
}

static int acer_gsensor_open(struct input_dev *input)
{
return acer_gsensor_init();
}

static int acer_gsensor_event(void)
{
acpi_status status;
struct acpi_buffer output;
union acpi_object out_obj[5];

if (!has_cap(ACER_CAP_ACCEL))
return -1;

output.length = sizeof(out_obj);
output.pointer = out_obj;

status = acpi_evaluate_object(gsensor_handle, "RDVL", NULL, &output);
if (ACPI_FAILURE(status))
return -1;

if (out_obj->package.count != 4)
return -1;

input_report_abs(acer_wmi_accel_dev, ABS_X,
(s16)out_obj->package.elements[0].integer.value);
input_report_abs(acer_wmi_accel_dev, ABS_Y,
(s16)out_obj->package.elements[1].integer.value);
input_report_abs(acer_wmi_accel_dev, ABS_Z,
(s16)out_obj->package.elements[2].integer.value);
input_sync(acer_wmi_accel_dev);
return 0;
}


Κώδικας: Επιλογή όλων
{
int err;

err = acer_wmi_get_handle("SENR", "BST0001", &gsensor_handle);
if (err)
return err;

interface->capability |= ACER_CAP_ACCEL;

acer_wmi_accel_dev = input_allocate_device();
if (!acer_wmi_accel_dev)
return -ENOMEM;

acer_wmi_accel_dev->open = acer_gsensor_open;

acer_wmi_accel_dev->name = "Acer BMA150 accelerometer";
acer_wmi_accel_dev->phys = "wmi/input1";
acer_wmi_accel_dev->id.bustype = BUS_HOST;
acer_wmi_accel_dev->evbit[0] = BIT_MASK(EV_ABS);
input_set_abs_params(acer_wmi_accel_dev, ABS_X, -16384, 16384, 0, 0);
input_set_abs_params(acer_wmi_accel_dev, ABS_Y, -16384, 16384, 0, 0);
input_set_abs_params(acer_wmi_accel_dev, ABS_Z, -16384, 16384, 0, 0);

err = input_register_device(acer_wmi_accel_dev);
if (err)
goto err_free_dev;

return 0;
Υπάρχει κώδικας για τη συσκευή που ψάχνουμε, την αναφέρει "Acer BMA150 accelerometer"
edit:
Ψάχνω και για αυτά που είπες πριν και απαντάω σε λίγο.