9
0
Fork 0
barebox/arch/arm/boards/archosg9/feature_list.h

353 lines
7.0 KiB
C

#ifndef _FEATURE_LIST_H
#define _FEATURE_LIST_H
/*
This file comes from:
http://gitorious.org/archos/archos-gpl-gen9-kernel-ics/blobs/raw/master/
arch/arm/include/asm/feature_list.h
*/
#define FEATURE_LIST_MAGIC 0xFEA01234
#define FEATURE_LIST_REV 0x00000001
struct feature_tag_header {
u32 size;
u32 tag;
};
struct feature_tag_generic {
u32 vendor;
u32 product;
u32 type;
u32 revision;
u32 flags;
};
#define FTAG_NONE 0x00000000
#define FTAG_CORE 0x00000001
struct feature_tag_core {
u32 magic;
u32 list_revision;
u32 flags;
};
/* product specific */
#define FTAG_PRODUCT_NAME 0x00000002
struct feature_tag_product_name {
char name[64];
u32 id;
};
#define FTAG_PRODUCT_SERIAL_NUMBER 0x00000003
struct feature_tag_product_serial {
u32 serial[4];
};
#define FTAG_PRODUCT_MAC_ADDRESS 0x00000004
struct feature_tag_product_mac_address {
u8 addr[6];
u8 reserved1;
u8 reserved2;
};
#define FTAG_PRODUCT_OEM 0x00000005
struct feature_tag_product_oem {
char name[16];
u32 id;
};
#define FTAG_PRODUCT_ZONE 0x00000006
struct feature_tag_product_zone {
char name[16];
u32 id;
};
/* board pcb specific */
#define FTAG_BOARD_PCB_REVISION 0x00000010
struct feature_tag_board_revision {
u32 revision;
};
/* clock and ram setup */
#define FTAG_CLOCK 0x00000011
struct feature_tag_clock {
u32 clock;
};
#define FTAG_SDRAM 0x00000012
struct feature_tag_sdram {
char vendor[16];
char product[32];
u32 type;
u32 revision;
u32 flags;
u32 clock;
/* custom params */
u32 param_0;
u32 param_1;
u32 param_2;
u32 param_3;
u32 param_4;
u32 param_5;
u32 param_6;
u32 param_7;
};
/* PMIC */
#define FTAG_PMIC 0x00000013
#define FTAG_PMIC_TPS62361 0x00000001
struct feature_tag_pmic {
u32 flags;
};
/* serial port */
#define FTAG_SERIAL_PORT 0x00000020
struct feature_tag_serial_port {
u32 uart_id;
u32 speed;
};
/* turbo bit */
#define FTAG_TURBO 0x00000014
struct feature_tag_turbo {
u32 flag;
};
/*** features ****/
#define FTAG_HAS_GPIO_VOLUME_KEYS 0x00010001
struct feature_tag_gpio_volume_keys {
u32 gpio_vol_up;
u32 gpio_vol_down;
u32 flags;
};
#define FTAG_HAS_ELECTRICAL_SHORTCUT 0x00010002
#define FTAG_HAS_DCIN 0x00010003
struct feature_tag_dcin {
u32 autodetect;
};
/* external screen support */
#define FTAG_HAS_EXT_SCREEN 0x00010004
#define EXT_SCREEN_TYPE_TVOUT 0x00000001
#define EXT_SCREEN_TYPE_HDMI 0x00000002
#define EXT_SCREEN_TYPE_VGA 0x00000004
struct feature_tag_ext_screen {
u32 type;
u32 revision;
};
/* wireless lan */
#define FTAG_HAS_WIFI 0x00010005
#define WIFI_TYPE_TIWLAN 0x00000001
struct feature_tag_wifi {
u32 vendor;
u32 product;
u32 type;
u32 revision;
u32 flags;
};
/* bluetooth */
#define FTAG_HAS_BLUETOOTH 0x00010006
#define BLUETOOTH_TYPE_TIWLAN 0x00000001
struct feature_tag_bluetooth {
u32 vendor;
u32 product;
u32 type;
u32 revision;
u32 flags;
};
/* accelerometer */
#define FTAG_HAS_ACCELEROMETER 0x00010007
struct feature_tag_accelerometer {
u32 vendor;
u32 product;
u32 type;
u32 revision;
u32 flags;
};
/* gyroscope */
#define FTAG_HAS_GYROSCOPE 0x00010008
/* compass */
#define FTAG_HAS_COMPASS 0x00010009
/* gps */
#define FTAG_HAS_GPS 0x0001000a
#define GPS_FLAG_DISABLED 0x00000001
struct feature_tag_gps {
u32 vendor;
u32 product;
u32 revision;
u32 flags;
};
/* camera */
#define FTAG_HAS_CAMERA 0x0001000b
/* harddisk controller */
#define FTAG_HAS_HARDDISK_CONTROLLER 0x0001000c
#define HDCONTROLLER_TYPE_SATA 0x00000001
struct feature_tag_harddisk_controller {
u32 vendor;
u32 product;
u32 type;
u32 revision;
u32 flags;
};
/* harddisk */
#define FTAG_HAS_HARDDISK 0x0001000d
#define HARDDISK_TYPE_SATA 0x00000001
#define HARDDISK_TYPE_PATA 0x00000002
struct feature_tag_harddisk {
u32 vendor;
u32 product;
u32 type;
u32 revision;
u32 flags;
};
/* touchscreen */
#define FTAG_HAS_TOUCHSCREEN 0x0001000e
#define TOUCHSCREEN_TYPE_CAPACITIVE 0x00000001
#define TOUCHSCREEN_TYPE_RESISTIVE 0x00000002
#define TOUCHSCREEN_FLAG_MULTITOUCH 0x00000001
struct feature_tag_touchscreen {
u32 vendor;
u32 product;
u32 type;
u32 revision;
u32 flags;
};
/* microphone */
#define FTAG_HAS_MICROPHONE 0x0001000f
/* external SDMMC slot */
#define FTAG_HAS_EXT_MMCSD_SLOT 0x00010010
#define MMCSD_FLAG_CARDDETECT 0x00000001
#define MMCSD_FLAG_CARDPREDETECT 0x00000002
struct feature_tag_mmcsd {
u32 width;
u32 voltagemask;
u32 revision;
u32 flags;
};
/* ambient light sensor */
#define FTAG_HAS_AMBIENT_LIGHT_SENSOR 0x00010011
/* proximity sensor */
#define FTAG_HAS_PROXIMITY_SENSOR 0x00010012
/* gps */
#define FTAG_HAS_GSM 0x00010013
/* dect */
#define FTAG_HAS_DECT 0x00010014
/* hsdpa data modem */
#define FTAG_HAS_HSDPA 0x00010015
/* near field communication */
#define FTAG_HAS_NFC 0x00010016
#define FTAG_GPIO_KEYS 0x00010017
struct feature_tag_gpio_keys {
#define GPIO_KEYS_LONG_PRESS 0x00010000
u32 vol_up;
u32 vol_down;
u32 ok;
u32 reserved[5];
};
#define FTAG_SCREEN 0x00010018
struct feature_tag_screen {
char vendor[16];
u32 type;
u32 revision;
u32 vcom;
u32 backlight;
u32 reserved[5];
};
#define FTAG_WIFI_PA 0x00010019
struct feature_tag_wifi_pa {
char vendor[16];
u32 type;
};
/* loudspeaker */
#define FTAG_HAS_SPEAKER 0x0001001a
#define SPEAKER_FLAG_STEREO 0x00000001
#define SPEAKER_FLAG_OWN_VOLCTRL 0x00000002
struct feature_tag_speaker {
u32 flags;
};
#define FTAG_BATTERY 0x0001001b
struct feature_tag_battery {
u32 type;
};
#define BATTERY_TYPE_HIGHRS 0x00000000
#define BATTERY_TYPE_LOWRS 0x00000001
#define feature_tag_next(t) \
((struct feature_tag *)((u32 *)(t) + (t)->hdr.size))
#define feature_tag_size(type) \
((sizeof(struct feature_tag_header) + sizeof(struct type)) >> 2)
#define for_each_feature_tag(t, base) \
for (t = base; t->hdr.size; t = feature_tag_next(t))
struct feature_tag {
struct feature_tag_header hdr;
union {
struct feature_tag_core core;
struct feature_tag_generic generic;
struct feature_tag_product_name product_name;
struct feature_tag_product_serial product_serial;
struct feature_tag_product_oem product_oem;
struct feature_tag_product_zone product_zone;
struct feature_tag_product_mac_address mac_address;
struct feature_tag_board_revision board_revision;
struct feature_tag_clock clock;
struct feature_tag_sdram sdram;
struct feature_tag_pmic pmic;
struct feature_tag_turbo turbo;
struct feature_tag_serial_port serial_port;
struct feature_tag_gpio_volume_keys gpio_volume_keys;
struct feature_tag_dcin dcin;
struct feature_tag_ext_screen ext_screen;
struct feature_tag_wifi wifi;
struct feature_tag_bluetooth bluetooth;
struct feature_tag_accelerometer accelerometer;
struct feature_tag_harddisk_controller harddisk_controller;
struct feature_tag_harddisk harddisk;
struct feature_tag_touchscreen touchscreen;
struct feature_tag_gps gps;
struct feature_tag_speaker speaker;
struct feature_tag_mmcsd mmcsd;
struct feature_tag_gpio_keys gpio_keys;
struct feature_tag_screen screen;
struct feature_tag_wifi_pa wifi_pa;
struct feature_tag_battery battery;
} u;
};
#endif /* _FEATURE_LIST_H */