Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/platform/x86/x86-android-tablets/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 8 kB image not shown  

Quelle  asus.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * Board info for Asus X86 tablets which ship with Android as the factory image
 * and which have broken DSDT tables. The factory kernels shipped on these
 * devices typically have a bunch of things hardcoded, rather than specified
 * in their DSDT.
 *
 * Copyright (C) 2021-2023 Hans de Goede <hdegoede@redhat.com>
 */


#include <linux/gpio/machine.h>
#include <linux/input.h>
#include <linux/platform_device.h>

#include "shared-psy-info.h"
#include "x86-android-tablets.h"

/* Asus ME176C and TF103C tablets shared data */
static struct gpiod_lookup_table int3496_gpo2_pin22_gpios = {
 .dev_id = "intel-int3496",
 .table = {
  GPIO_LOOKUP("INT33FC:02", 22, "id", GPIO_ACTIVE_HIGH),
  { }
 },
};

static const struct x86_gpio_button asus_me176c_tf103c_lid __initconst = {
 .button = {
  .code = SW_LID,
  .active_low = true,
  .desc = "lid_sw",
  .type = EV_SW,
  .wakeup = true,
  .debounce_interval = 50,
 },
 .chip = "INT33FC:02",
 .pin = 12,
};

/* Asus ME176C tablets have an Android factory image with everything hardcoded */
static const char * const asus_me176c_accel_mount_matrix[] = {
 "-1""0""0",
 "0""1""0",
 "0""0""1"
};

static const struct property_entry asus_me176c_accel_props[] = {
 PROPERTY_ENTRY_STRING_ARRAY("mount-matrix", asus_me176c_accel_mount_matrix),
 { }
};

static const struct software_node asus_me176c_accel_node = {
 .properties = asus_me176c_accel_props,
};

static const struct property_entry asus_me176c_bq24190_props[] = {
 PROPERTY_ENTRY_STRING_ARRAY_LEN("supplied-from", tusb1211_chg_det_psy, 1),
 PROPERTY_ENTRY_REF("monitored-battery", &generic_lipo_hv_4v35_battery_node),
 PROPERTY_ENTRY_U32("ti,system-minimum-microvolt", 3600000),
 PROPERTY_ENTRY_BOOL("omit-battery-class"),
 PROPERTY_ENTRY_BOOL("disable-reset"),
 { }
};

static const struct software_node asus_me176c_bq24190_node = {
 .properties = asus_me176c_bq24190_props,
};

static const struct property_entry asus_me176c_ug3105_props[] = {
 PROPERTY_ENTRY_STRING_ARRAY_LEN("supplied-from", bq24190_psy, 1),
 PROPERTY_ENTRY_REF("monitored-battery", &generic_lipo_hv_4v35_battery_node),
 PROPERTY_ENTRY_U32("upisemi,rsns-microohm", 10000),
 { }
};

static const struct software_node asus_me176c_ug3105_node = {
 .properties = asus_me176c_ug3105_props,
};

static const struct x86_i2c_client_info asus_me176c_i2c_clients[] __initconst = {
 {
  /* bq24297 battery charger */
  .board_info = {
   .type = "bq24190",
   .addr = 0x6b,
   .dev_name = "bq24297",
   .swnode = &asus_me176c_bq24190_node,
   .platform_data = &bq24190_pdata,
  },
  .adapter_path = "\\_SB_.I2C1",
  .irq_data = {
   .type = X86_ACPI_IRQ_TYPE_PMIC,
   .chip = "\\_SB_.I2C7.PMIC",
   .domain = DOMAIN_BUS_WAKEUP,
   .index = 0,
  },
 }, {
  /* ug3105 battery monitor */
  .board_info = {
   .type = "ug3105",
   .addr = 0x70,
   .dev_name = "ug3105",
   .swnode = &asus_me176c_ug3105_node,
  },
  .adapter_path = "\\_SB_.I2C1",
 }, {
  /* ak09911 compass */
  .board_info = {
   .type = "ak09911",
   .addr = 0x0c,
   .dev_name = "ak09911",
  },
  .adapter_path = "\\_SB_.I2C5",
 }, {
  /* kxtj21009 accelerometer */
  .board_info = {
   .type = "kxtj21009",
   .addr = 0x0f,
   .dev_name = "kxtj21009",
   .swnode = &asus_me176c_accel_node,
  },
  .adapter_path = "\\_SB_.I2C5",
  .irq_data = {
   .type = X86_ACPI_IRQ_TYPE_APIC,
   .index = 0x44,
   .trigger = ACPI_EDGE_SENSITIVE,
   .polarity = ACPI_ACTIVE_LOW,
  },
 }, {
  /* goodix touchscreen */
  .board_info = {
   .type = "GDIX1001:00",
   .addr = 0x14,
   .dev_name = "goodix_ts",
  },
  .adapter_path = "\\_SB_.I2C6",
  .irq_data = {
   .type = X86_ACPI_IRQ_TYPE_APIC,
   .index = 0x45,
   .trigger = ACPI_EDGE_SENSITIVE,
   .polarity = ACPI_ACTIVE_LOW,
  },
 },
};

static const struct x86_serdev_info asus_me176c_serdevs[] __initconst = {
 {
  .ctrl.acpi.hid = "80860F0A",
  .ctrl.acpi.uid = "2",
  .ctrl_devname = "serial0",
  .serdev_hid = "BCM2E3A",
 },
};

static struct gpiod_lookup_table asus_me176c_goodix_gpios = {
 .dev_id = "i2c-goodix_ts",
 .table = {
  GPIO_LOOKUP("INT33FC:00", 60, "reset", GPIO_ACTIVE_HIGH),
  GPIO_LOOKUP("INT33FC:02", 28, "irq", GPIO_ACTIVE_HIGH),
  { }
 },
};

static struct gpiod_lookup_table * const asus_me176c_gpios[] = {
 &int3496_gpo2_pin22_gpios,
 &asus_me176c_goodix_gpios,
 NULL
};

const struct x86_dev_info asus_me176c_info __initconst = {
 .i2c_client_info = asus_me176c_i2c_clients,
 .i2c_client_count = ARRAY_SIZE(asus_me176c_i2c_clients),
 .pdev_info = int3496_pdevs,
 .pdev_count = 1,
 .serdev_info = asus_me176c_serdevs,
 .serdev_count = ARRAY_SIZE(asus_me176c_serdevs),
 .gpio_button = &asus_me176c_tf103c_lid,
 .gpio_button_count = 1,
 .gpiod_lookup_tables = asus_me176c_gpios,
 .bat_swnode = &generic_lipo_hv_4v35_battery_node,
 .modules = bq24190_modules,
};

/* Asus TF103C tablets have an Android factory image with everything hardcoded */
static const char * const asus_tf103c_accel_mount_matrix[] = {
 "0""-1""0",
 "-1""0""0",
 "0""0""1"
};

static const struct property_entry asus_tf103c_accel_props[] = {
 PROPERTY_ENTRY_STRING_ARRAY("mount-matrix", asus_tf103c_accel_mount_matrix),
 { }
};

static const struct software_node asus_tf103c_accel_node = {
 .properties = asus_tf103c_accel_props,
};

static const struct property_entry asus_tf103c_touchscreen_props[] = {
 PROPERTY_ENTRY_STRING("compatible""atmel,atmel_mxt_ts"),
 { }
};

static const struct software_node asus_tf103c_touchscreen_node = {
 .properties = asus_tf103c_touchscreen_props,
};

static const struct property_entry asus_tf103c_bq24190_props[] = {
 PROPERTY_ENTRY_STRING_ARRAY_LEN("supplied-from", tusb1211_chg_det_psy, 1),
 PROPERTY_ENTRY_REF("monitored-battery", &generic_lipo_4v2_battery_node),
 PROPERTY_ENTRY_U32("ti,system-minimum-microvolt", 3600000),
 PROPERTY_ENTRY_BOOL("omit-battery-class"),
 PROPERTY_ENTRY_BOOL("disable-reset"),
 { }
};

static const struct software_node asus_tf103c_bq24190_node = {
 .properties = asus_tf103c_bq24190_props,
};

static const struct property_entry asus_tf103c_ug3105_props[] = {
 PROPERTY_ENTRY_STRING_ARRAY_LEN("supplied-from", bq24190_psy, 1),
 PROPERTY_ENTRY_REF("monitored-battery", &generic_lipo_4v2_battery_node),
 PROPERTY_ENTRY_U32("upisemi,rsns-microohm", 5000),
 { }
};

static const struct software_node asus_tf103c_ug3105_node = {
 .properties = asus_tf103c_ug3105_props,
};

static const struct x86_i2c_client_info asus_tf103c_i2c_clients[] __initconst = {
 {
  /* bq24297 battery charger */
  .board_info = {
   .type = "bq24190",
   .addr = 0x6b,
   .dev_name = "bq24297",
   .swnode = &asus_tf103c_bq24190_node,
   .platform_data = &bq24190_pdata,
  },
  .adapter_path = "\\_SB_.I2C1",
  .irq_data = {
   .type = X86_ACPI_IRQ_TYPE_PMIC,
   .chip = "\\_SB_.I2C7.PMIC",
   .domain = DOMAIN_BUS_WAKEUP,
   .index = 0,
  },
 }, {
  /* ug3105 battery monitor */
  .board_info = {
   .type = "ug3105",
   .addr = 0x70,
   .dev_name = "ug3105",
   .swnode = &asus_tf103c_ug3105_node,
  },
  .adapter_path = "\\_SB_.I2C1",
 }, {
  /* ak09911 compass */
  .board_info = {
   .type = "ak09911",
   .addr = 0x0c,
   .dev_name = "ak09911",
  },
  .adapter_path = "\\_SB_.I2C5",
 }, {
  /* kxtj21009 accelerometer */
  .board_info = {
   .type = "kxtj21009",
   .addr = 0x0f,
   .dev_name = "kxtj21009",
   .swnode = &asus_tf103c_accel_node,
  },
  .adapter_path = "\\_SB_.I2C5",
 }, {
  /* atmel touchscreen */
  .board_info = {
   .type = "atmel_mxt_ts",
   .addr = 0x4a,
   .dev_name = "atmel_mxt_ts",
   .swnode = &asus_tf103c_touchscreen_node,
  },
  .adapter_path = "\\_SB_.I2C6",
  .irq_data = {
   .type = X86_ACPI_IRQ_TYPE_GPIOINT,
   .chip = "INT33FC:02",
   .index = 28,
   .trigger = ACPI_EDGE_SENSITIVE,
   .polarity = ACPI_ACTIVE_LOW,
   .con_id = "atmel_mxt_ts_irq",
  },
 },
};

static struct gpiod_lookup_table * const asus_tf103c_gpios[] = {
 &int3496_gpo2_pin22_gpios,
 NULL
};

const struct x86_dev_info asus_tf103c_info __initconst = {
 .i2c_client_info = asus_tf103c_i2c_clients,
 .i2c_client_count = ARRAY_SIZE(asus_tf103c_i2c_clients),
 .pdev_info = int3496_pdevs,
 .pdev_count = 1,
 .gpio_button = &asus_me176c_tf103c_lid,
 .gpio_button_count = 1,
 .gpiod_lookup_tables = asus_tf103c_gpios,
 .bat_swnode = &generic_lipo_4v2_battery_node,
 .modules = bq24190_modules,
};

Messung V0.5
C=94 H=89 G=91

¤ Dauer der Verarbeitung: 0.4 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.