* [PATCH] HID: hid-sensor-hub: Processing for duplicate physical ids
From: Srinivas Pandruvada @ 2014-01-30 16:40 UTC (permalink / raw)
To: jkosina; +Cc: jic23, linux-input, Srinivas Pandruvada, Archana Patni
In HID sensor hub, HID physical ids are used to represent different
sensors. For example physical id of 0x73 in usage page = 0x20, represents
an accelerometer. The HID sensor hub driver uses this physical ids to
create platform devices using MFD. There is 1:1 correspondence between
an phy id and a client driver.
But in some cases these physical ids are reused. There is a phy id 0xe1,
which specifies a custom sensor, which can exist multiple times to represent
various custom sensors. In this case there can be multiple instances
of client MFD drivers, processing specific custom sensor. In this
case when client driver looks for report id or a field index, it
should still get the report id specific to its own type. This is
also true for reports, they should be directed towards correct instance.
This change introduce a way to parse and tie physical devices to their
correct instance.
Summary of changes:
- To get physical ids, use collections. If a collection of type=physical
exist then use usage id as in the name of platform device name
- As part of the platform data, we assign a hdsev instance, which has
start and end of collection indexes. Using these indexes attributes
can be tied to correct MFD client instances
- When a report is received, call callback with correct hsdev instance.
In this way using its private data stored as part of its registry, it
can distinguish different sensors even when they have same physical and
logical ids.
This patch is co-authored with Archana Patni<archna.patni@intel.com>.
Reported-by: Archana Patni <archana.patni@intel.com>
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Archana Patni <archana.patni@intel.com>
---
drivers/hid/hid-sensor-hub.c | 182 ++++++++++++++++++++++-------------------
include/linux/hid-sensor-hub.h | 6 +-
2 files changed, 102 insertions(+), 86 deletions(-)
diff --git a/drivers/hid/hid-sensor-hub.c b/drivers/hid/hid-sensor-hub.c
index ad2b869..80be0c0 100644
--- a/drivers/hid/hid-sensor-hub.c
+++ b/drivers/hid/hid-sensor-hub.c
@@ -56,9 +56,9 @@ struct sensor_hub_pending {
* @dyn_callback_lock: spin lock to protect callback list
* @hid_sensor_hub_client_devs: Stores all MFD cells for a hub instance.
* @hid_sensor_client_cnt: Number of MFD cells, (no of sensors attached).
+ * @ref_cnt: Number of MFD clients have opened this device
*/
struct sensor_hub_data {
- struct hid_sensor_hub_device *hsdev;
struct mutex mutex;
spinlock_t lock;
struct sensor_hub_pending pending;
@@ -67,6 +67,7 @@ struct sensor_hub_data {
struct mfd_cell *hid_sensor_hub_client_devs;
int hid_sensor_client_cnt;
unsigned long quirks;
+ int ref_cnt;
};
/**
@@ -79,6 +80,7 @@ struct sensor_hub_data {
struct hid_sensor_hub_callbacks_list {
struct list_head list;
u32 usage_id;
+ struct hid_sensor_hub_device *hsdev;
struct hid_sensor_hub_callbacks *usage_callback;
void *priv;
};
@@ -97,20 +99,18 @@ static struct hid_report *sensor_hub_report(int id, struct hid_device *hdev,
return NULL;
}
-static int sensor_hub_get_physical_device_count(
- struct hid_report_enum *report_enum)
+static int sensor_hub_get_physical_device_count(struct hid_device *hdev)
{
- struct hid_report *report;
- struct hid_field *field;
- int cnt = 0;
+ int i;
+ int count = 0;
- list_for_each_entry(report, &report_enum->report_list, list) {
- field = report->field[0];
- if (report->maxfield && field && field->physical)
- cnt++;
+ for (i = 0; i < hdev->maxcollection; ++i) {
+ struct hid_collection *collection = &hdev->collection[i];
+ if (collection->type == HID_COLLECTION_PHYSICAL)
+ ++count;
}
- return cnt;
+ return count;
}
static void sensor_hub_fill_attr_info(
@@ -128,15 +128,23 @@ static void sensor_hub_fill_attr_info(
static struct hid_sensor_hub_callbacks *sensor_hub_get_callback(
struct hid_device *hdev,
- u32 usage_id, void **priv)
+ u32 usage_id,
+ int collection_index,
+ struct hid_sensor_hub_device **hsdev,
+ void **priv)
{
struct hid_sensor_hub_callbacks_list *callback;
struct sensor_hub_data *pdata = hid_get_drvdata(hdev);
spin_lock(&pdata->dyn_callback_lock);
list_for_each_entry(callback, &pdata->dyn_callback_list, list)
- if (callback->usage_id == usage_id) {
+ if (callback->usage_id == usage_id &&
+ (collection_index >=
+ callback->hsdev->start_collection_index) &&
+ (collection_index <
+ callback->hsdev->end_collection_index)) {
*priv = callback->priv;
+ *hsdev = callback->hsdev;
spin_unlock(&pdata->dyn_callback_lock);
return callback->usage_callback;
}
@@ -163,6 +171,7 @@ int sensor_hub_register_callback(struct hid_sensor_hub_device *hsdev,
spin_unlock(&pdata->dyn_callback_lock);
return -ENOMEM;
}
+ callback->hsdev = hsdev;
callback->usage_callback = usage_callback;
callback->usage_id = usage_id;
callback->priv = NULL;
@@ -320,8 +329,7 @@ int sensor_hub_input_get_attribute_info(struct hid_sensor_hub_device *hsdev,
struct hid_sensor_hub_attribute_info *info)
{
int ret = -1;
- int i, j;
- int collection_index = -1;
+ int i;
struct hid_report *report;
struct hid_field *field;
struct hid_report_enum *report_enum;
@@ -335,44 +343,31 @@ int sensor_hub_input_get_attribute_info(struct hid_sensor_hub_device *hsdev,
info->units = -1;
info->unit_expo = -1;
- for (i = 0; i < hdev->maxcollection; ++i) {
- struct hid_collection *collection = &hdev->collection[i];
- if (usage_id == collection->usage) {
- collection_index = i;
- break;
- }
- }
- if (collection_index == -1)
- goto err_ret;
-
report_enum = &hdev->report_enum[type];
list_for_each_entry(report, &report_enum->report_list, list) {
for (i = 0; i < report->maxfield; ++i) {
field = report->field[i];
- if (field->physical == usage_id &&
- field->logical == attr_usage_id) {
- sensor_hub_fill_attr_info(info, i, report->id,
- field);
- ret = 0;
- } else {
- for (j = 0; j < field->maxusage; ++j) {
- if (field->usage[j].hid ==
- attr_usage_id &&
- field->usage[j].collection_index ==
- collection_index) {
- sensor_hub_fill_attr_info(info,
- i, report->id, field);
- ret = 0;
- break;
- }
+ if (field->maxusage) {
+ if (field->physical == usage_id &&
+ (field->logical == attr_usage_id ||
+ field->usage[0].hid ==
+ attr_usage_id) &&
+ (field->usage[0].collection_index >=
+ hsdev->start_collection_index) &&
+ (field->usage[0].collection_index <
+ hsdev->end_collection_index)) {
+
+ sensor_hub_fill_attr_info(info, i,
+ report->id,
+ field);
+ ret = 0;
+ break;
}
}
- if (ret == 0)
- break;
}
+
}
-err_ret:
return ret;
}
EXPORT_SYMBOL_GPL(sensor_hub_input_get_attribute_info);
@@ -388,7 +383,7 @@ static int sensor_hub_suspend(struct hid_device *hdev, pm_message_t message)
list_for_each_entry(callback, &pdata->dyn_callback_list, list) {
if (callback->usage_callback->suspend)
callback->usage_callback->suspend(
- pdata->hsdev, callback->priv);
+ callback->hsdev, callback->priv);
}
spin_unlock(&pdata->dyn_callback_lock);
@@ -405,7 +400,7 @@ static int sensor_hub_resume(struct hid_device *hdev)
list_for_each_entry(callback, &pdata->dyn_callback_list, list) {
if (callback->usage_callback->resume)
callback->usage_callback->resume(
- pdata->hsdev, callback->priv);
+ callback->hsdev, callback->priv);
}
spin_unlock(&pdata->dyn_callback_lock);
@@ -432,6 +427,7 @@ static int sensor_hub_raw_event(struct hid_device *hdev,
struct hid_sensor_hub_callbacks *callback = NULL;
struct hid_collection *collection = NULL;
void *priv = NULL;
+ struct hid_sensor_hub_device *hsdev = NULL;
hid_dbg(hdev, "sensor_hub_raw_event report id:0x%x size:%d type:%d\n",
report->id, size, report->type);
@@ -466,23 +462,26 @@ static int sensor_hub_raw_event(struct hid_device *hdev,
report->field[i]->usage->collection_index];
hid_dbg(hdev, "collection->usage %x\n",
collection->usage);
- callback = sensor_hub_get_callback(pdata->hsdev->hdev,
- report->field[i]->physical,
- &priv);
+
+ callback = sensor_hub_get_callback(hdev,
+ report->field[i]->physical,
+ report->field[i]->usage[0].collection_index,
+ &hsdev, &priv);
+
if (callback && callback->capture_sample) {
if (report->field[i]->logical)
- callback->capture_sample(pdata->hsdev,
+ callback->capture_sample(hsdev,
report->field[i]->logical, sz, ptr,
callback->pdev);
else
- callback->capture_sample(pdata->hsdev,
+ callback->capture_sample(hsdev,
report->field[i]->usage->hid, sz, ptr,
callback->pdev);
}
ptr += sz;
}
if (callback && collection && callback->send_event)
- callback->send_event(pdata->hsdev, collection->usage,
+ callback->send_event(hsdev, collection->usage,
callback->pdev);
spin_unlock_irqrestore(&pdata->lock, flags);
@@ -495,7 +494,7 @@ int sensor_hub_device_open(struct hid_sensor_hub_device *hsdev)
struct sensor_hub_data *data = hid_get_drvdata(hsdev->hdev);
mutex_lock(&data->mutex);
- if (!hsdev->ref_cnt) {
+ if (!data->ref_cnt) {
ret = hid_hw_open(hsdev->hdev);
if (ret) {
hid_err(hsdev->hdev, "failed to open hid device\n");
@@ -503,7 +502,7 @@ int sensor_hub_device_open(struct hid_sensor_hub_device *hsdev)
return ret;
}
}
- hsdev->ref_cnt++;
+ data->ref_cnt++;
mutex_unlock(&data->mutex);
return ret;
@@ -515,8 +514,8 @@ void sensor_hub_device_close(struct hid_sensor_hub_device *hsdev)
struct sensor_hub_data *data = hid_get_drvdata(hsdev->hdev);
mutex_lock(&data->mutex);
- hsdev->ref_cnt--;
- if (!hsdev->ref_cnt)
+ data->ref_cnt--;
+ if (!data->ref_cnt)
hid_hw_close(hsdev->hdev);
mutex_unlock(&data->mutex);
}
@@ -563,26 +562,19 @@ static int sensor_hub_probe(struct hid_device *hdev,
struct sensor_hub_data *sd;
int i;
char *name;
- struct hid_report *report;
- struct hid_report_enum *report_enum;
- struct hid_field *field;
int dev_cnt;
+ struct hid_sensor_hub_device *hsdev;
+ struct hid_sensor_hub_device *last_hsdev = NULL;
sd = devm_kzalloc(&hdev->dev, sizeof(*sd), GFP_KERNEL);
if (!sd) {
hid_err(hdev, "cannot allocate Sensor data\n");
return -ENOMEM;
}
- sd->hsdev = devm_kzalloc(&hdev->dev, sizeof(*sd->hsdev), GFP_KERNEL);
- if (!sd->hsdev) {
- hid_err(hdev, "cannot allocate hid_sensor_hub_device\n");
- return -ENOMEM;
- }
+
hid_set_drvdata(hdev, sd);
sd->quirks = id->driver_data;
- sd->hsdev->hdev = hdev;
- sd->hsdev->vendor_id = hdev->vendor;
- sd->hsdev->product_id = hdev->product;
+
spin_lock_init(&sd->lock);
spin_lock_init(&sd->dyn_callback_lock);
mutex_init(&sd->mutex);
@@ -600,9 +592,8 @@ static int sensor_hub_probe(struct hid_device *hdev,
}
INIT_LIST_HEAD(&sd->dyn_callback_list);
sd->hid_sensor_client_cnt = 0;
- report_enum = &hdev->report_enum[HID_INPUT_REPORT];
- dev_cnt = sensor_hub_get_physical_device_count(report_enum);
+ dev_cnt = sensor_hub_get_physical_device_count(hdev);
if (dev_cnt > HID_MAX_PHY_DEVICES) {
hid_err(hdev, "Invalid Physical device count\n");
ret = -EINVAL;
@@ -616,42 +607,63 @@ static int sensor_hub_probe(struct hid_device *hdev,
ret = -ENOMEM;
goto err_stop_hw;
}
- list_for_each_entry(report, &report_enum->report_list, list) {
- hid_dbg(hdev, "Report id:%x\n", report->id);
- field = report->field[0];
- if (report->maxfield && field &&
- field->physical) {
+
+ for (i = 0; i < hdev->maxcollection; ++i) {
+ struct hid_collection *collection = &hdev->collection[i];
+
+ if (collection->type == HID_COLLECTION_PHYSICAL) {
+
+ hsdev = kzalloc(sizeof(*hsdev), GFP_KERNEL);
+ if (!hsdev) {
+ hid_err(hdev, "cannot allocate hid_sensor_hub_device\n");
+ ret = -ENOMEM;
+ goto err_no_mem;
+ }
+ hsdev->hdev = hdev;
+ hsdev->vendor_id = hdev->vendor;
+ hsdev->product_id = hdev->product;
+ hsdev->start_collection_index = i;
+ if (last_hsdev)
+ last_hsdev->end_collection_index = i;
+ last_hsdev = hsdev;
name = kasprintf(GFP_KERNEL, "HID-SENSOR-%x",
- field->physical);
+ collection->usage);
if (name == NULL) {
hid_err(hdev, "Failed MFD device name\n");
ret = -ENOMEM;
- goto err_free_names;
+ goto err_no_mem;
}
sd->hid_sensor_hub_client_devs[
- sd->hid_sensor_client_cnt].id = PLATFORM_DEVID_AUTO;
+ sd->hid_sensor_client_cnt].id =
+ PLATFORM_DEVID_AUTO;
sd->hid_sensor_hub_client_devs[
sd->hid_sensor_client_cnt].name = name;
sd->hid_sensor_hub_client_devs[
sd->hid_sensor_client_cnt].platform_data =
- sd->hsdev;
+ hsdev;
sd->hid_sensor_hub_client_devs[
sd->hid_sensor_client_cnt].pdata_size =
- sizeof(*sd->hsdev);
- hid_dbg(hdev, "Adding %s:%p\n", name, sd);
+ sizeof(*hsdev);
+ hid_dbg(hdev, "Adding %s:%d\n", name,
+ hsdev->start_collection_index);
sd->hid_sensor_client_cnt++;
}
}
+ if (last_hsdev)
+ last_hsdev->end_collection_index = i;
+
ret = mfd_add_devices(&hdev->dev, 0, sd->hid_sensor_hub_client_devs,
sd->hid_sensor_client_cnt, NULL, 0, NULL);
if (ret < 0)
- goto err_free_names;
+ goto err_no_mem;
return ret;
-err_free_names:
- for (i = 0; i < sd->hid_sensor_client_cnt ; ++i)
+err_no_mem:
+ for (i = 0; i < sd->hid_sensor_client_cnt; ++i) {
kfree(sd->hid_sensor_hub_client_devs[i].name);
+ kfree(sd->hid_sensor_hub_client_devs[i].platform_data);
+ }
kfree(sd->hid_sensor_hub_client_devs);
err_stop_hw:
hid_hw_stop(hdev);
@@ -673,8 +685,10 @@ static void sensor_hub_remove(struct hid_device *hdev)
complete(&data->pending.ready);
spin_unlock_irqrestore(&data->lock, flags);
mfd_remove_devices(&hdev->dev);
- for (i = 0; i < data->hid_sensor_client_cnt ; ++i)
+ for (i = 0; i < data->hid_sensor_client_cnt; ++i) {
kfree(data->hid_sensor_hub_client_devs[i].name);
+ kfree(data->hid_sensor_hub_client_devs[i].platform_data);
+ }
kfree(data->hid_sensor_hub_client_devs);
hid_set_drvdata(hdev, NULL);
mutex_destroy(&data->mutex);
diff --git a/include/linux/hid-sensor-hub.h b/include/linux/hid-sensor-hub.h
index 205eba0..b70cfd7 100644
--- a/include/linux/hid-sensor-hub.h
+++ b/include/linux/hid-sensor-hub.h
@@ -51,13 +51,15 @@ struct hid_sensor_hub_attribute_info {
* @hdev: Stores the hid instance.
* @vendor_id: Vendor id of hub device.
* @product_id: Product id of hub device.
- * @ref_cnt: Number of MFD clients have opened this device
+ * @start_collection_index: Starting index for a phy type collection
+ * @end_collection_index: Last index for a phy type collection
*/
struct hid_sensor_hub_device {
struct hid_device *hdev;
u32 vendor_id;
u32 product_id;
- int ref_cnt;
+ int start_collection_index;
+ int end_collection_index;
};
/**
--
1.8.3.2
^ permalink raw reply related
* [PATCH v4 RESEND] ims-pcu: Add commands supported by the new version of the FW
From: Andrey Smirnov @ 2014-01-30 15:40 UTC (permalink / raw)
To: linux-input; +Cc: andrew.smirnov, dmitry.torokhov, linux-kernel
New version of the PCU firmware supports two new commands:
- IMS_PCU_CMD_OFN_SET_CONFIG which allows to write data to the
registers of one finger navigation(OFN) chip present on the device
- IMS_PCU_CMD_OFN_GET_CONFIG which allows to read data form the
registers of said chip.
This commit adds two helper functions to use those commands and sysfs
attributes to use them. It also exposes some OFN configuration
parameters via sysfs.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/misc/ims-pcu.c | 260 +++++++++++++++++++++++++++++++++++++++++--
1 file changed, 251 insertions(+), 9 deletions(-)
diff --git a/drivers/input/misc/ims-pcu.c b/drivers/input/misc/ims-pcu.c
index e204f26..0306e8d 100644
--- a/drivers/input/misc/ims-pcu.c
+++ b/drivers/input/misc/ims-pcu.c
@@ -51,6 +51,8 @@ struct ims_pcu_backlight {
#define IMS_PCU_BL_VERSION_LEN (9 + 1)
#define IMS_PCU_BL_RESET_REASON_LEN (2 + 1)
+#define IMS_PCU_PCU_B_DEVICE_ID 5
+
#define IMS_PCU_BUF_SIZE 128
struct ims_pcu {
@@ -68,6 +70,9 @@ struct ims_pcu {
char bl_version[IMS_PCU_BL_VERSION_LEN];
char reset_reason[IMS_PCU_BL_RESET_REASON_LEN];
int update_firmware_status;
+ u8 device_id;
+
+ u8 ofn_reg_addr;
struct usb_interface *ctrl_intf;
@@ -371,6 +376,8 @@ static void ims_pcu_destroy_gamepad(struct ims_pcu *pcu)
#define IMS_PCU_CMD_GET_DEVICE_ID 0xae
#define IMS_PCU_CMD_SPECIAL_INFO 0xb0
#define IMS_PCU_CMD_BOOTLOADER 0xb1 /* Pass data to bootloader */
+#define IMS_PCU_CMD_OFN_SET_CONFIG 0xb3
+#define IMS_PCU_CMD_OFN_GET_CONFIG 0xb4
/* PCU responses */
#define IMS_PCU_RSP_STATUS 0xc0
@@ -389,6 +396,9 @@ static void ims_pcu_destroy_gamepad(struct ims_pcu *pcu)
#define IMS_PCU_RSP_GET_DEVICE_ID 0xce
#define IMS_PCU_RSP_SPECIAL_INFO 0xd0
#define IMS_PCU_RSP_BOOTLOADER 0xd1 /* Bootloader response */
+#define IMS_PCU_RSP_OFN_SET_CONFIG 0xd2
+#define IMS_PCU_RSP_OFN_GET_CONFIG 0xd3
+
#define IMS_PCU_RSP_EVNT_BUTTONS 0xe0 /* Unsolicited, button state */
#define IMS_PCU_GAMEPAD_MASK 0x0001ff80UL /* Bits 7 through 16 */
@@ -1226,7 +1236,7 @@ static struct attribute *ims_pcu_attrs[] = {
&dev_attr_reset_device.attr,
&dev_attr_update_firmware.attr,
&dev_attr_update_firmware_status.attr,
- NULL
+ NULL,
};
static umode_t ims_pcu_is_attr_visible(struct kobject *kobj,
@@ -1256,6 +1266,225 @@ static struct attribute_group ims_pcu_attr_group = {
.attrs = ims_pcu_attrs,
};
+/* Support for a separate OFN attribute group */
+
+#define OFN_REG_RESULT_OFFSET 2
+
+static int ims_pcu_read_ofn_config(struct ims_pcu *pcu, u8 addr, u8 *data)
+{
+ int error;
+ s16 result;
+
+ error = ims_pcu_execute_command(pcu, OFN_GET_CONFIG,
+ &addr, sizeof(addr));
+ if (error)
+ return error;
+
+ result = (s16)get_unaligned_le16(pcu->cmd_buf + OFN_REG_RESULT_OFFSET);
+ if (result < 0)
+ return -EIO;
+
+ /* We only need LSB */
+ *data = pcu->cmd_buf[OFN_REG_RESULT_OFFSET];
+ return 0;
+}
+
+static int ims_pcu_write_ofn_config(struct ims_pcu *pcu, u8 addr, u8 data)
+{
+ u8 buffer[] = { addr, data };
+ int error;
+ s16 result;
+
+ error = ims_pcu_execute_command(pcu, OFN_SET_CONFIG,
+ &buffer, sizeof(buffer));
+ if (error)
+ return error;
+
+ result = (s16)get_unaligned_le16(pcu->cmd_buf + OFN_REG_RESULT_OFFSET);
+ if (result < 0)
+ return -EIO;
+
+ return 0;
+}
+
+static ssize_t ims_pcu_ofn_reg_data_show(struct device *dev,
+ struct device_attribute *dattr,
+ char *buf)
+{
+ struct usb_interface *intf = to_usb_interface(dev);
+ struct ims_pcu *pcu = usb_get_intfdata(intf);
+ int error;
+ u8 data;
+
+ mutex_lock(&pcu->cmd_mutex);
+ error = ims_pcu_read_ofn_config(pcu, pcu->ofn_reg_addr, &data);
+ mutex_unlock(&pcu->cmd_mutex);
+
+ if (error)
+ return error;
+
+ return scnprintf(buf, PAGE_SIZE, "%x\n", data);
+}
+
+static ssize_t ims_pcu_ofn_reg_data_store(struct device *dev,
+ struct device_attribute *dattr,
+ const char *buf, size_t count)
+{
+ struct usb_interface *intf = to_usb_interface(dev);
+ struct ims_pcu *pcu = usb_get_intfdata(intf);
+ int error;
+ u8 value;
+
+ error = kstrtou8(buf, 0, &value);
+ if (error)
+ return error;
+
+ mutex_lock(&pcu->cmd_mutex);
+ error = ims_pcu_write_ofn_config(pcu, pcu->ofn_reg_addr, value);
+ mutex_unlock(&pcu->cmd_mutex);
+
+ return error ?: count;
+}
+
+static DEVICE_ATTR(reg_data, S_IRUGO | S_IWUSR,
+ ims_pcu_ofn_reg_data_show, ims_pcu_ofn_reg_data_store);
+
+static ssize_t ims_pcu_ofn_reg_addr_show(struct device *dev,
+ struct device_attribute *dattr,
+ char *buf)
+{
+ struct usb_interface *intf = to_usb_interface(dev);
+ struct ims_pcu *pcu = usb_get_intfdata(intf);
+ int error;
+
+ mutex_lock(&pcu->cmd_mutex);
+ error = scnprintf(buf, PAGE_SIZE, "%x\n", pcu->ofn_reg_addr);
+ mutex_unlock(&pcu->cmd_mutex);
+
+ return error;
+}
+
+static ssize_t ims_pcu_ofn_reg_addr_store(struct device *dev,
+ struct device_attribute *dattr,
+ const char *buf, size_t count)
+{
+ struct usb_interface *intf = to_usb_interface(dev);
+ struct ims_pcu *pcu = usb_get_intfdata(intf);
+ int error;
+ u8 value;
+
+ error = kstrtou8(buf, 0, &value);
+ if (error)
+ return error;
+
+ mutex_lock(&pcu->cmd_mutex);
+ pcu->ofn_reg_addr = value;
+ mutex_unlock(&pcu->cmd_mutex);
+
+ return error ?: count;
+}
+
+static DEVICE_ATTR(reg_addr, S_IRUGO | S_IWUSR,
+ ims_pcu_ofn_reg_addr_show, ims_pcu_ofn_reg_addr_store);
+
+struct ims_pcu_ofn_bit_attribute {
+ struct device_attribute dattr;
+ u8 addr;
+ u8 nr;
+};
+
+static ssize_t ims_pcu_ofn_bit_show(struct device *dev,
+ struct device_attribute *dattr,
+ char *buf)
+{
+ struct usb_interface *intf = to_usb_interface(dev);
+ struct ims_pcu *pcu = usb_get_intfdata(intf);
+ struct ims_pcu_ofn_bit_attribute *attr =
+ container_of(dattr, struct ims_pcu_ofn_bit_attribute, dattr);
+ int error;
+ u8 data;
+
+ mutex_lock(&pcu->cmd_mutex);
+ error = ims_pcu_read_ofn_config(pcu, attr->addr, &data);
+ mutex_unlock(&pcu->cmd_mutex);
+
+ if (error)
+ return error;
+
+ return scnprintf(buf, PAGE_SIZE, "%d\n", !!(data & (1 << attr->nr)));
+}
+
+static ssize_t ims_pcu_ofn_bit_store(struct device *dev,
+ struct device_attribute *dattr,
+ const char *buf, size_t count)
+{
+ struct usb_interface *intf = to_usb_interface(dev);
+ struct ims_pcu *pcu = usb_get_intfdata(intf);
+ struct ims_pcu_ofn_bit_attribute *attr =
+ container_of(dattr, struct ims_pcu_ofn_bit_attribute, dattr);
+ int error;
+ int value;
+ u8 data;
+
+ error = kstrtoint(buf, 0, &value);
+ if (error)
+ return error;
+
+ if (value > 1)
+ return -EINVAL;
+
+ mutex_lock(&pcu->cmd_mutex);
+
+ error = ims_pcu_read_ofn_config(pcu, attr->addr, &data);
+ if (!error) {
+ if (value)
+ data |= 1U << attr->nr;
+ else
+ data &= ~(1U << attr->nr);
+
+ error = ims_pcu_write_ofn_config(pcu, attr->addr, data);
+ }
+
+ mutex_unlock(&pcu->cmd_mutex);
+
+ return error ?: count;
+}
+
+#define IMS_PCU_OFN_BIT_ATTR(_field, _addr, _nr) \
+struct ims_pcu_ofn_bit_attribute ims_pcu_ofn_attr_##_field = { \
+ .dattr = __ATTR(_field, S_IWUSR | S_IRUGO, \
+ ims_pcu_ofn_bit_show, ims_pcu_ofn_bit_store), \
+ .addr = _addr, \
+ .nr = _nr, \
+}
+
+static IMS_PCU_OFN_BIT_ATTR(engine_enable, 0x60, 7);
+static IMS_PCU_OFN_BIT_ATTR(speed_enable, 0x60, 6);
+static IMS_PCU_OFN_BIT_ATTR(assert_enable, 0x60, 5);
+static IMS_PCU_OFN_BIT_ATTR(xyquant_enable, 0x60, 4);
+static IMS_PCU_OFN_BIT_ATTR(xyscale_enable, 0x60, 1);
+
+static IMS_PCU_OFN_BIT_ATTR(scale_x2, 0x63, 6);
+static IMS_PCU_OFN_BIT_ATTR(scale_y2, 0x63, 7);
+
+static struct attribute *ims_pcu_ofn_attrs[] = {
+ &dev_attr_reg_data.attr,
+ &dev_attr_reg_addr.attr,
+ &ims_pcu_ofn_attr_engine_enable.dattr.attr,
+ &ims_pcu_ofn_attr_speed_enable.dattr.attr,
+ &ims_pcu_ofn_attr_assert_enable.dattr.attr,
+ &ims_pcu_ofn_attr_xyquant_enable.dattr.attr,
+ &ims_pcu_ofn_attr_xyscale_enable.dattr.attr,
+ &ims_pcu_ofn_attr_scale_x2.dattr.attr,
+ &ims_pcu_ofn_attr_scale_y2.dattr.attr,
+ NULL
+};
+
+static struct attribute_group ims_pcu_ofn_attr_group = {
+ .name = "ofn",
+ .attrs = ims_pcu_ofn_attrs,
+};
+
static void ims_pcu_irq(struct urb *urb)
{
struct ims_pcu *pcu = urb->context;
@@ -1624,7 +1853,6 @@ static int ims_pcu_init_application_mode(struct ims_pcu *pcu)
static atomic_t device_no = ATOMIC_INIT(0);
const struct ims_pcu_device_info *info;
- u8 device_id;
int error;
error = ims_pcu_get_device_info(pcu);
@@ -1633,7 +1861,7 @@ static int ims_pcu_init_application_mode(struct ims_pcu *pcu)
return error;
}
- error = ims_pcu_identify_type(pcu, &device_id);
+ error = ims_pcu_identify_type(pcu, &pcu->device_id);
if (error) {
dev_err(pcu->dev,
"Failed to identify device, error: %d\n", error);
@@ -1645,9 +1873,9 @@ static int ims_pcu_init_application_mode(struct ims_pcu *pcu)
return 0;
}
- if (device_id >= ARRAY_SIZE(ims_pcu_device_info) ||
- !ims_pcu_device_info[device_id].keymap) {
- dev_err(pcu->dev, "Device ID %d is not valid\n", device_id);
+ if (pcu->device_id >= ARRAY_SIZE(ims_pcu_device_info) ||
+ !ims_pcu_device_info[pcu->device_id].keymap) {
+ dev_err(pcu->dev, "Device ID %d is not valid\n", pcu->device_id);
/* Same as above, punt to userspace */
return 0;
}
@@ -1655,11 +1883,21 @@ static int ims_pcu_init_application_mode(struct ims_pcu *pcu)
/* Device appears to be operable, complete initialization */
pcu->device_no = atomic_inc_return(&device_no) - 1;
+ /*
+ PCU-B devices, both GEN_1 and GEN_2 do not have OFN sensor
+ */
+ if (pcu->device_id != IMS_PCU_PCU_B_DEVICE_ID) {
+ error = sysfs_create_group(&pcu->dev->kobj,
+ &ims_pcu_ofn_attr_group);
+ if (error)
+ return error;
+ }
+
error = ims_pcu_setup_backlight(pcu);
if (error)
return error;
- info = &ims_pcu_device_info[device_id];
+ info = &ims_pcu_device_info[pcu->device_id];
error = ims_pcu_setup_buttons(pcu, info->keymap, info->keymap_len);
if (error)
goto err_destroy_backlight;
@@ -1674,10 +1912,10 @@ static int ims_pcu_init_application_mode(struct ims_pcu *pcu)
return 0;
-err_destroy_backlight:
- ims_pcu_destroy_backlight(pcu);
err_destroy_buttons:
ims_pcu_destroy_buttons(pcu);
+err_destroy_backlight:
+ ims_pcu_destroy_backlight(pcu);
return error;
}
@@ -1691,6 +1929,10 @@ static void ims_pcu_destroy_application_mode(struct ims_pcu *pcu)
ims_pcu_destroy_gamepad(pcu);
ims_pcu_destroy_buttons(pcu);
ims_pcu_destroy_backlight(pcu);
+
+ if (pcu->device_id != IMS_PCU_PCU_B_DEVICE_ID)
+ sysfs_remove_group(&pcu->dev->kobj,
+ &ims_pcu_ofn_attr_group);
}
}
--
1.8.3.2
^ permalink raw reply related
* Re: Can I limit the scope of an input device to specific processes ?
From: Fabien André @ 2014-01-30 14:42 UTC (permalink / raw)
To: R.Zimmermann, xorg; +Cc: David Herrmann, linux-input
In-Reply-To: <52EA1A94.8090300@UKE.Uni-Hamburg.de>
Hi Roger,
On Thu, Jan 30, 2014 at 10:25 AM, Dr. Zimmermann
<R.Zimmermann@uke.uni-hamburg.de> wrote:
> Or is there a better forum to ask about X (input) stuff?
xorg list (added) would definitely be a better place to discuss this topic.
> that looks promising: I was able to separate our response-box-keyboards from
> the core keyboard so that pressed (response-)keys are no longer transmitted
> by default anymore.
>
> Can You shortly point me to the next steps necessary?
> -> Create e new core pointer/keyboard pair and connect the
> reponse-box-keyboard to it?
>
The next steps would be to read events through xinput, that is,
instead of consuming event from your GUI toolkit, retrieve them
directly from X. ( It may exist supporting tool for that).
Main steps are
* retrieve a display, (XOpenDisplay)
* retrieve your device based on name (oR id), (XIQueryDevice )
* bind your display with some events of your device, (XISetMask,
XISelectEvents )
* retrieve a file descriptor for your display event, feed your
mainloop with this file descriptor (ConnectionNumber)
* read and decode event (XPending, XNextEvent, XGetEventData)
Here is an example tool relaying xinput events to a software bus you
may find interseting to throw a glance:
http://svn.tls.cena.fr/wsvn/ivy/xinput2-ivy/trunk/xinput2_ivy.c
I do not see the need for another pointer/keyboard (that would not be
core by the way) unless you use a tool that support multiple keyboard
(I know of no such tool).
Regards,
Fabien
On Thu, Jan 30, 2014 at 10:25 AM, Dr. Zimmermann
<R.Zimmermann@uke.uni-hamburg.de> wrote:
> Am 29.01.2014 13:31, schrieb Fabien André:
>
>> An alternative to X config file is the xinput command line tool
>>
>> $> xinput list
>> to get the name and id of your device
>> $>xinput float NAME_OR_ID
>> to "detach" the device from the virtual core keyboard
>> (the name will be stable while id can change after unplug or restart, thus
>> name is a better candidate for scripting)
>
>
> Hi Fabien,
>
> that looks promising: I was able to separate our response-box-keyboards from
> the core keyboard so that pressed (response-)keys are no longer transmitted
> by default anymore.
>
> Can You shortly point me to the next steps necessary?
> -> Create e new core pointer/keyboard pair and connect the
> reponse-box-keyboard to it?
>
> Or is there a better forum to ask about X (input) stuff?
>
> Thanx, Roger
>
>>
>>
>>
>> On Wed, Jan 29, 2014 at 10:44 AM, Dr. Zimmermann <
>> R.Zimmermann@uke.uni-hamburg.de> wrote:
>>
>>> Am 28.01.2014 13:49, schrieb David Herrmann:
>>>
>>>> Hi
>>>>
>>>> Hi David,
>>>
>>>
>>> On Tue, Jan 28, 2014 at 1:27 PM, Dr. Zimmermann
>>>>
>>>> <R.Zimmermann@uke.uni-hamburg.de> wrote:
>>>>
>>>>> Am 28.01.2014 12:15, schrieb David Herrmann:
>>>>>
>>>>> Hi
>>>>>>
>>>>>>
>>>>>> On Tue, Jan 28, 2014 at 11:20 AM, Dr. Zimmermann
>>>>>> <R.Zimmermann@uke.uni-hamburg.de> wrote:
>>>>>>
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> we've got a special type of keyboard which should only be available
>>>>>>> in
>>>>>>> one
>>>>>>> specific process and not publicly, as usually keyboards are.
>>>>>>>
>>>>>>> Is it possible to limit the scope of a specific keyboard?
>>>>>>>
>>>>>>> Or is there a more suited forum where to ask?
>>>>>>>
>>>>>>
>>>>>
>>>>> Hi David,
>>>>>
>>>>>
>>>>>
>>>>>> There is no such interface in the kernel. However, with careful
>>>>>> access-management, you can get what you want by just allowing your
>>>>>> single process access to the device. But I guess you are working with
>>>>>> an X11 system, so a description of what you actually want to achieve
>>>>>> would help a lot.
>>>>>>
>>>>>
>>>>>
>>>>> Thnx for Your quick reply.
>>>>>
>>>>> (Yes, we are using X. No, the problem is not specific to X: It'll also
>>>>> occur
>>>>> when You switch between system consoles.)
>>>>>
>>>>
>>>> Just don't use the system-console for that. It's not intended for that
>>>> purpose and no-one will enhance it to do device-separation (why would
>>>> you.. it's mainly meant as system-administrator fallback). But see
>>>> below..
>>>>
>>>
>>> We've never intended to use it for our purposes, still the effect that
>>> we've got is the same than under X.
>>>
>>>
>>>> For research purposes we are measuring human brain activity under the
>>>>>
>>>>> influence of external stimuli (visual/auditory/somatosensory). The
>>>>> subject
>>>>> has to reply to tasks using 'button boxes' which are implemented as
>>>>> keyboards. Usually, type and time of the buttonpress are of importance
>>>>> (and
>>>>> will probably change further procedere). Keyboard responses usually go
>>>>> to
>>>>> that window (or system console) which has the current focus or is
>>>>> active
>>>>> and
>>>>> *this* is something, we do not want.
>>>>>
>>>>> Sometimes we show visual stimuli on one screen(#1) and operate the
>>>>> system
>>>>> from another screen(#2). Sometimes we even have no visual stimuli at
>>>>> all,
>>>>> but like to read subject responses and control the stimuli from within
>>>>> a
>>>>> control window. In all cases it would be helpful if the response-boxes
>>>>> would
>>>>> not automatically send their output to the active window resp.
>>>>> application.
>>>>>
>>>>> Helpful would be, if the output of the response-box-keyboards
>>>>> * could be restricted to a specific process
>>>>> * is not sent automatically, but only to a program which 'opened' the
>>>>> device
>>>>> * is not sent automatically, but has to be read from a device.
>>>>> (Could this be done preserving the exact timepoint of each
>>>>> buttonpress?)
>>>>>
>>>>
>>>> First of all, nothing is "sent automatically". Processes have to read
>>>> the events from the kernel, so point #3 doesn't make much sense to me.
>>>>
>>>
>>> Think of me as quite unaware in these matters. I'm seeing this 'signal'
>>> (keyboard events) distributed by default to every application which gets
>>> active/the focus.
>>>
>>> But regarding your issue: You should simply configure you xserver to
>>>>
>>>> not use the devices in question. Add an X11 config to
>>>> /etc/X11/xorg.conf.d/50-ignore-custom-devices.conf which contains
>>>> something like:
>>>>
>>>> Section "InputClass"
>>>> Identifier "Custom Input Blacklist"
>>>> MatchProduct "<Product-Name-of-Your-Device>"
>>>> MatchDevicePath "/dev/input/event*"
>>>> Option "Ignore" "on"
>>>> EndSection
>>>>
>>>> You can read the product-name of your device via: `cat
>>>> /sys/class/input/input<num>/name`
>>>> where "input<num>" is your device in question.
>>>>
>>>> This will cause the Xserver to stop using your input devices and no
>>>> window will get any events from them. Now you can program your custom
>>>> applications to open the correct devices manually and reading events
>>>> from them. However, this requires modifications to these applications.
>>>> But if you just want your xserver to route specific events to specific
>>>> processes, your applications must be XInput2-aware/capable.
>>>>
>>>> Instructing the kernel to route specific events to specific processes
>>>> is the wrong approach here (except regarding the linux-console, which
>>>> is special but *really* shouldn't be used for such stuff). The kernel
>>>> does not care for policy but only provides hardware-abstraction. It's
>>>> up to your applications to use the correct X11 APIs to only read
>>>> events from specific XInput2-devices. So the correct people to ask
>>>> about this are actually the developers of your applications and the
>>>> X11 people. The kernel, by default, restricts input-device access to
>>>> root, so basically *no* user gets input access. The X-Server now
>>>> applies some default policies on these devices to route events to X11
>>>> applications. By default, hot-plugging is enabled in new X-Servers and
>>>> all devices are markes as Master devices. This means, their events are
>>>> broad-casted to all X11 windows. If you don't want that, you can mark
>>>> devices as "Floating", which means, the device will not broadcast
>>>> events, but use the XInput API to report input events. Only
>>>> applications which use XInput can now request events from the device.
>>>>
>>>> You can mark devices as floating via:
>>>> Section "InputClass"
>>>> Identifier "Custom Input Blacklist"
>>>> MatchProduct "<Product-Name-of-Your-Device>"
>>>> MatchDevicePath "/dev/input/event*"
>>>> Option "Floating" "on"
>>>> EndSection
>>>>
>>>> Also see "man xorg.conf" and search for "Floating".
>>>>
>>>
>>> Thanks for this explanation. It helped a lot and I now see, which 'path'
>>> to go on...
>>>
>>>>
>>>> I hope that helps! I it's still unclear, let me know.
>>>> As a side-note, please always put the mailing-lists on CC. I'm not
>>>> doing that myself now, as I don't know whether you excluded them on
>>>> purpose. But if you start a discussion on the mailing-list, you should
>>>> keep it there so other people can comment, too. Most mail-clients
>>>> provide the "reply to all" feature to do that automatically.
>>>>
>>> My mailer didn't do it correctly. But short time after the mail to You,
>>> the same mail was sent to the list manually...
>>>
>>>>
>>>> Thanks
>>>> David
>>>>
>>>
>>> Thanks again & Regards,
>>> Roger
>>>
>>> .
>>>>
>>>>
>>>>
>>> --
>>>
>>> Besuchen Sie uns auf: www.uke.de
>>> _____________________________________________________________________
>>>
>>> Universitätsklinikum Hamburg-Eppendorf; Körperschaft des öffentlichen
>>> Rechts; Gerichtsstand: Hamburg
>>> Vorstandsmitglieder: Prof. Dr. Christian Gerloff (Vertreter des
>>> Vorsitzenden), Prof. Dr. Dr. Uwe Koch-Gromus, Joachim Prölß, Rainer
>>> Schoppik
>>> _____________________________________________________________________
>>>
>>> SAVE PAPER - THINK BEFORE PRINTING
>>>
>>
>
> --
>
> Besuchen Sie uns auf: www.uke.de
> _____________________________________________________________________
>
> Universitätsklinikum Hamburg-Eppendorf; Körperschaft des öffentlichen
> Rechts; Gerichtsstand: Hamburg
> Vorstandsmitglieder: Prof. Dr. Christian Gerloff (Vertreter des
> Vorsitzenden), Prof. Dr. Dr. Uwe Koch-Gromus, Joachim Prölß, Rainer Schoppik
> _____________________________________________________________________
>
> SAVE PAPER - THINK BEFORE PRINTING
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: [PATCH v2] HID: i2c-hid: add runtime PM support
From: Jiri Kosina @ 2014-01-30 12:05 UTC (permalink / raw)
To: Mika Westerberg; +Cc: linux-input, Benjamin Tissoires, linux-kernel
In-Reply-To: <1390987476-1905-1-git-send-email-mika.westerberg@linux.intel.com>
On Wed, 29 Jan 2014, Mika Westerberg wrote:
> This patch adds runtime PM support for the HID over I2C driver. When the
> i2c-hid device is first opened we power it on and on the last close we
> power it off. This is actually what the driver is already doing but in
> addition it allows subsystems, like ACPI power domain to power off the
> device during runtime PM suspend, which should save even more power.
>
> The implementation is not the most power efficient because it needs some
> interaction from the userspace (e.g close the device node whenever we are
> no more interested in getting events), nevertheless it allows us to save
> some power and works with devices that are not wake capable.
>
> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
> ---
> v2:
> - Update changelog to mention that ACPI power domain for example can
> power off the device on suspend.
> - Make i2c_hid_power to just call RPM get/put
Applied, thanks Mika, thanks Benjamin.
>
> drivers/hid/i2c-hid/i2c-hid.c | 68 ++++++++++++++++++++++++++++++++++++-------
> 1 file changed, 57 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/hid/i2c-hid/i2c-hid.c b/drivers/hid/i2c-hid/i2c-hid.c
> index d1f81f52481a..923ff818a1bf 100644
> --- a/drivers/hid/i2c-hid/i2c-hid.c
> +++ b/drivers/hid/i2c-hid/i2c-hid.c
> @@ -25,6 +25,7 @@
> #include <linux/delay.h>
> #include <linux/slab.h>
> #include <linux/pm.h>
> +#include <linux/pm_runtime.h>
> #include <linux/device.h>
> #include <linux/wait.h>
> #include <linux/err.h>
> @@ -454,10 +455,18 @@ static void i2c_hid_init_reports(struct hid_device *hid)
> return;
> }
>
> + /*
> + * The device must be powered on while we fetch initial reports
> + * from it.
> + */
> + pm_runtime_get_sync(&client->dev);
> +
> list_for_each_entry(report,
> &hid->report_enum[HID_FEATURE_REPORT].report_list, list)
> i2c_hid_init_report(report, inbuf, ihid->bufsize);
>
> + pm_runtime_put(&client->dev);
> +
> kfree(inbuf);
> }
>
> @@ -703,8 +712,8 @@ static int i2c_hid_open(struct hid_device *hid)
>
> mutex_lock(&i2c_hid_open_mut);
> if (!hid->open++) {
> - ret = i2c_hid_set_power(client, I2C_HID_PWR_ON);
> - if (ret) {
> + ret = pm_runtime_get_sync(&client->dev);
> + if (ret < 0) {
> hid->open--;
> goto done;
> }
> @@ -712,7 +721,7 @@ static int i2c_hid_open(struct hid_device *hid)
> }
> done:
> mutex_unlock(&i2c_hid_open_mut);
> - return ret;
> + return ret < 0 ? ret : 0;
> }
>
> static void i2c_hid_close(struct hid_device *hid)
> @@ -729,7 +738,7 @@ static void i2c_hid_close(struct hid_device *hid)
> clear_bit(I2C_HID_STARTED, &ihid->flags);
>
> /* Save some power */
> - i2c_hid_set_power(client, I2C_HID_PWR_SLEEP);
> + pm_runtime_put(&client->dev);
> }
> mutex_unlock(&i2c_hid_open_mut);
> }
> @@ -738,19 +747,18 @@ static int i2c_hid_power(struct hid_device *hid, int lvl)
> {
> struct i2c_client *client = hid->driver_data;
> struct i2c_hid *ihid = i2c_get_clientdata(client);
> - int ret = 0;
>
> i2c_hid_dbg(ihid, "%s lvl:%d\n", __func__, lvl);
>
> switch (lvl) {
> case PM_HINT_FULLON:
> - ret = i2c_hid_set_power(client, I2C_HID_PWR_ON);
> + pm_runtime_get_sync(&client->dev);
> break;
> case PM_HINT_NORMAL:
> - ret = i2c_hid_set_power(client, I2C_HID_PWR_SLEEP);
> + pm_runtime_put(&client->dev);
> break;
> }
> - return ret;
> + return 0;
> }
>
> static struct hid_ll_driver i2c_hid_ll_driver = {
> @@ -973,13 +981,17 @@ static int i2c_hid_probe(struct i2c_client *client,
> if (ret < 0)
> goto err;
>
> + pm_runtime_get_noresume(&client->dev);
> + pm_runtime_set_active(&client->dev);
> + pm_runtime_enable(&client->dev);
> +
> ret = i2c_hid_fetch_hid_descriptor(ihid);
> if (ret < 0)
> - goto err;
> + goto err_pm;
>
> ret = i2c_hid_init_irq(client);
> if (ret < 0)
> - goto err;
> + goto err_pm;
>
> hid = hid_allocate_device();
> if (IS_ERR(hid)) {
> @@ -1010,6 +1022,7 @@ static int i2c_hid_probe(struct i2c_client *client,
> goto err_mem_free;
> }
>
> + pm_runtime_put(&client->dev);
> return 0;
>
> err_mem_free:
> @@ -1018,6 +1031,10 @@ err_mem_free:
> err_irq:
> free_irq(client->irq, ihid);
>
> +err_pm:
> + pm_runtime_put_noidle(&client->dev);
> + pm_runtime_disable(&client->dev);
> +
> err:
> i2c_hid_free_buffers(ihid);
> kfree(ihid);
> @@ -1029,6 +1046,11 @@ static int i2c_hid_remove(struct i2c_client *client)
> struct i2c_hid *ihid = i2c_get_clientdata(client);
> struct hid_device *hid;
>
> + pm_runtime_get_sync(&client->dev);
> + pm_runtime_disable(&client->dev);
> + pm_runtime_set_suspended(&client->dev);
> + pm_runtime_put_noidle(&client->dev);
> +
> hid = ihid->hid;
> hid_destroy_device(hid);
>
> @@ -1074,7 +1096,31 @@ static int i2c_hid_resume(struct device *dev)
> }
> #endif
>
> -static SIMPLE_DEV_PM_OPS(i2c_hid_pm, i2c_hid_suspend, i2c_hid_resume);
> +#ifdef CONFIG_PM_RUNTIME
> +static int i2c_hid_runtime_suspend(struct device *dev)
> +{
> + struct i2c_client *client = to_i2c_client(dev);
> +
> + i2c_hid_set_power(client, I2C_HID_PWR_SLEEP);
> + disable_irq(client->irq);
> + return 0;
> +}
> +
> +static int i2c_hid_runtime_resume(struct device *dev)
> +{
> + struct i2c_client *client = to_i2c_client(dev);
> +
> + enable_irq(client->irq);
> + i2c_hid_set_power(client, I2C_HID_PWR_ON);
> + return 0;
> +}
> +#endif
> +
> +static const struct dev_pm_ops i2c_hid_pm = {
> + SET_SYSTEM_SLEEP_PM_OPS(i2c_hid_suspend, i2c_hid_resume)
> + SET_RUNTIME_PM_OPS(i2c_hid_runtime_suspend, i2c_hid_runtime_resume,
> + NULL)
> +};
>
> static const struct i2c_device_id i2c_hid_id_table[] = {
> { "hid", 0 },
> --
> 1.8.5.2
>
--
Jiri Kosina
SUSE Labs
^ permalink raw reply
* Re: [PATCH] HID: i2c-hid: add runtime PM support
From: Mika Westerberg @ 2014-01-30 11:41 UTC (permalink / raw)
To: Benjamin Tissoires
Cc: linux-input, Jiri Kosina, Benjamin Tissoires,
linux-kernel@vger.kernel.org
In-Reply-To: <CAN+gG=HoPBBkM7v88y-K=q7mkMET-2dn2YcSN6zWi50cLnBqVA@mail.gmail.com>
On Wed, Jan 29, 2014 at 09:57:00AM -0500, Benjamin Tissoires wrote:
> That's great. I hope this will also fix my Lenovo Miix 2 (the T100 is
> too expensive compared to the Dell Venue pro 8 and the Lenovo one) :)
> I think most of my problems are ACPI related (WIFI card not powered
> up, SD-ext reader not working, suspend/resume not there, etc...), so I
> expect great of you :)
Yeah, those devices use some ACPI features that are not well supported in
Linux. Most notably GPIO/Serialbus operation regions are currently not
supported at all. We are in progress of writing support for them.
^ permalink raw reply
* Re: PROBLEM: Kernel-Panic when using Apple-Magic-Trackpad
From: Jiri Kosina @ 2014-01-30 10:57 UTC (permalink / raw)
To: Gerrit Addiks; +Cc: linux-input, David Herrmann, Gustavo F. Padovan
In-Reply-To: <52E96F57.30903@addiks.de>
On Wed, 29 Jan 2014, Gerrit Addiks wrote:
> [1.] Kernel-Panic when using Apple-Magic-Trackpad
[ some CCs added ]
Could you please check whether patch from
http://www.spinics.net/lists/linux-bluetooth/msg41725.html
works around the issue for you?
Thanks.
>
> [2.] When the Linux-Kernel (>v3.11-rc1 in my case) gets used with the
> Apple Magic Trackpad, it will Kernel-Panic in one of three ways:
>
> 1. Switch to text-based UI and 'display' the panic.
> (Photos of that can be found in [7.9.])
>
> 2. Restore from the panic and dump all info from above into syslog.
> I dont really know if that is really the same kernel-panic,
> but it was triggered the exact same way and to my untrained eye it
> looks related somehow. Also it just occoured just once and then
> never again. The exact output frim syslog can be found in [7.8.]
>
> 3. Freeze the whole computer to the point where not even the
> numpad-LED works.
>
> It does not matter what computer is used. I have reproduced this panic
> on two very different computers (A MacMini5.1 and a Dell MidTower) and
> two physical instances of the trackpad, so i strongly assume
> that this is only about the software, not caused by hardware fault.
>
> I have reproduced this kernel-panic in many versions between [v3.11-rc1]
> and [v3.13]. I have also done a git bisect (which has eaten up my whole
> weekend) and after 13 long steps i could find the first bad commit:
> [b1a1442a23776756b254b69786848a94d92445ba]
> [HID: core: fix reporting of raw events]
>
> For those who dont know (or dont want to know):
> The Apple Magic Trackpad is a wireless pointing (and gestures) device
> that connects using bluetooth. It is like a big notebook trackpad as
> an own device. The linux driver for that thing is synaptics.
> (But from the first bad commit it looks like hid is at fault)
>
> This report is based on the launchpad-report #1269600:
> https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1269600
> A few photos of the kernel-panic in textmode as well as some more
> info's can be found there.
>
> This report was created according to the following guide:
> https://www.kernel.org/pub/linux/docs/lkml/reporting-bugs.html
>
> Because this is the first time for me to ever submit a report,
> please do not think bad of me if i did something wrong.
> I can be contacted via [gerrit@addiks.de] for any questions,
> thank you for paying attention to this.
>
> [3.] trackpad, synaptics, bluetooth, kernel-panic
>
> [4.] /proc/version :
> Linux version 3.13.0-031300-generic (apw@gomeisa)
> (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) )
> #201401192235 SMP Mon Jan 20 03:36:48 UTC 2014
>
> (This is a mainline-kernel acquired from:
> [http://kernel.ubuntu.com/~kernel-ppa/mainline/?C=N;O=D])
>
> [5.] I judge myself waaay too low-skilled to understand the oops-tracing.txt
> in a short time, but i will try to understand it in the future.
> I can just barely code C++ and have little to no internal knowledge about
> the internal kernel.
> Maybe someone can help me out here and tell me what to do, thanks.
>
> [6.] I think it is impossible to test this without an Apple-Magic-Trackpad.
> But if you do have one: just connect it, use it a while and see the
> kernel cry in agony. (You may need to watch the syslog in case the kernel
> survives the panic and just reports about it). In rare cases it can took
> a few hours of use until it breaks, but in the very most cases it breaks
> very in the first minutes.
>
> [7.] Environment:
>
> The following information are collected while the trackpad is connected
> and the linux version from [4.] is used and while the author (me) does
> not dare to touch the trackpad to not cause another kernel-panic.
>
> [7.1.] ver_linux :
>
> If some fields are empty or look unusual you may have an old version.
> Compare to the current minimal requirements in Documentation/Changes.
>
> Linux gerrit-testing-1404 3.13.0-031300-generic #201401192235 SMP Mon Jan 20
> 03:36:48 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
>
> Gnu C 4.8
> Gnu make 3.81
> binutils 2.24
> util-linux 2.20.1
> mount support
> module-init-tools 15
> e2fsprogs 1.42.9
> pcmciautils 018
> PPP 2.4.5
> Linux C Library 2.18
> Dynamic linker (ldd) 2.18
> Procps 3.3.9
> Net-tools 1.60
> Kbd 1.15.5
> Sh-utils 8.21
> wireless-tools 30
> Modules Loaded parport_pc ppdev bnep rfcomm intel_rapl
> x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel kvm b43
> snd_hda_codec_hdmi snd_hda_codec_cirrus crct10dif_pclmul crc32_pclmul
> ghash_clmulni_intel aesni_intel aes_x86_64 mac80211 lrw snd_hda_intel gf128mul
> snd_hda_codec glue_helper snd_usb_audio i915 snd_usbmidi_lib ablk_helper
> snd_hwdep cryptd cfg80211 snd_seq_midi btusb snd_seq_midi_event
> hid_roccat_koneplus snd_rawmidi bluetooth hid_roccat snd_seq snd_pcm ssb
> drm_kms_helper applesmc hid_roccat_common hid_appleir snd_seq_device
> snd_page_alloc joydev drm input_polldev snd_timer microcode i2c_algo_bit snd
> apple_gmux shpchp soundcore lpc_ich lp mei_me mei apple_bl parport bcma
> mac_hid video hid_generic usbhid hid tg3 ptp firewire_ohci pps_core
> firewire_core sdhci_pci crc_itu_t sdhci
>
> [7.2.] /proc/cpuinfo :
>
> processor : 0
> vendor_id : GenuineIntel
> cpu family : 6
> model : 42
> model name : Intel(R) Core(TM) i5-2415M CPU @ 2.30GHz
> stepping : 7
> microcode : 0x1a
> cpu MHz : 1269.582
> cache size : 3072 KB
> physical id : 0
> siblings : 4
> core id : 0
> cpu cores : 2
> apicid : 0
> initial apicid : 0
> fpu : yes
> fpu_exception : yes
> cpuid level : 13
> wp : yes
> flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
> pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm
> constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc
> aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16
> xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx
> lahf_lm ida arat xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid
> bogomips : 4589.28
> clflush size : 64
> cache_alignment : 64
> address sizes : 36 bits physical, 48 bits virtual
> power management:
>
> processor : 1
> [... trimmed down, same as processor 0... ]
>
> processor : 2
> [... trimmed down, same as processor 0... ]
>
> processor : 3
> [... trimmed down, same as processor 0... ]
>
> [7.3.] /proc/modules :
>
> hid_magicmouse 13722 0 - Live 0x0000000000000000
> hidp 24353 1 - Live 0x0000000000000000
> parport_pc 36962 0 - Live 0x0000000000000000
> ppdev 17711 0 - Live 0x0000000000000000
> bnep 19884 2 - Live 0x0000000000000000
> rfcomm 74748 12 - Live 0x0000000000000000
> intel_rapl 19228 0 - Live 0x0000000000000000
> x86_pkg_temp_thermal 14269 0 - Live 0x0000000000000000
> intel_powerclamp 19031 0 - Live 0x0000000000000000
> coretemp 17728 0 - Live 0x0000000000000000
> kvm_intel 144426 0 - Live 0x0000000000000000
> kvm 468147 1 kvm_intel, Live 0x0000000000000000
> b43 397438 0 - Live 0x0000000000000000
> snd_hda_codec_hdmi 46898 1 - Live 0x0000000000000000
> snd_hda_codec_cirrus 18855 1 - Live 0x0000000000000000
> crct10dif_pclmul 14250 0 - Live 0x0000000000000000
> crc32_pclmul 13160 0 - Live 0x0000000000000000
> ghash_clmulni_intel 13259 0 - Live 0x0000000000000000
> aesni_intel 55720 0 - Live 0x0000000000000000
> aes_x86_64 17131 1 aesni_intel, Live 0x0000000000000000
> mac80211 654124 1 b43, Live 0x0000000000000000
> lrw 13323 1 aesni_intel, Live 0x0000000000000000
> snd_hda_intel 57222 3 - Live 0x0000000000000000
> gf128mul 14951 1 lrw, Live 0x0000000000000000
> snd_hda_codec 199156 3 snd_hda_codec_hdmi,snd_hda_codec_cirrus,snd_hda_intel,
> Live 0x0000000000000000
> glue_helper 14095 1 aesni_intel, Live 0x0000000000000000
> snd_usb_audio 156119 3 - Live 0x0000000000000000
> i915 816869 3 - Live 0x0000000000000000
> snd_usbmidi_lib 29576 1 snd_usb_audio, Live 0x0000000000000000
> ablk_helper 13597 1 aesni_intel, Live 0x0000000000000000
> snd_hwdep 13613 2 snd_hda_codec,snd_usb_audio, Live 0x0000000000000000
> cryptd 20530 3 ghash_clmulni_intel,aesni_intel,ablk_helper, Live
> 0x0000000000000000
> cfg80211 509407 2 b43,mac80211, Live 0x0000000000000000
> snd_seq_midi 13324 0 - Live 0x0000000000000000
> btusb 28326 0 - Live 0x0000000000000000
> snd_seq_midi_event 14899 1 snd_seq_midi, Live 0x0000000000000000
> hid_roccat_koneplus 15270 0 - Live 0x0000000000000000
> snd_rawmidi 30465 2 snd_usbmidi_lib,snd_seq_midi, Live 0x0000000000000000
> bluetooth 411140 27 hidp,bnep,rfcomm,btusb, Live 0x0000000000000000
> hid_roccat 13485 1 hid_roccat_koneplus, Live 0x0000000000000000
> snd_seq 66061 2 snd_seq_midi,snd_seq_midi_event, Live 0x0000000000000000
> snd_pcm 107140 5 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_usb_audio,
> Live 0x0000000000000000
> ssb 63241 1 b43, Live 0x0000000000000000
> drm_kms_helper 53224 1 i915, Live 0x0000000000000000
> applesmc 19564 0 - Live 0x0000000000000000
> hid_roccat_common 13791 1 hid_roccat_koneplus, Live 0x0000000000000000
> hid_appleir 13010 0 - Live 0x0000000000000000
> snd_seq_device 14497 3 snd_seq_midi,snd_rawmidi,snd_seq, Live
> 0x0000000000000000
> snd_page_alloc 18798 2 snd_hda_intel,snd_pcm, Live 0x0000000000000000
> joydev 17575 0 - Live 0x0000000000000000
> drm 308397 4 i915,drm_kms_helper, Live 0x0000000000000000
> input_polldev 13896 1 applesmc, Live 0x0000000000000000
> snd_timer 30038 2 snd_seq,snd_pcm, Live 0x0000000000000000
> microcode 23788 0 - Live 0x0000000000000000
> i2c_algo_bit 13564 1 i915, Live 0x0000000000000000
> snd 73850 24
> snd_hda_codec_hdmi,snd_hda_codec_cirrus,snd_hda_intel,snd_hda_codec,snd_usb_audio,snd_usbmidi_lib,snd_hwdep,snd_seq_midi,snd_rawmidi,snd_seq,snd_pcm,snd_seq_device,snd_timer,
> Live 0x0000000000000000
> apple_gmux 13690 0 - Live 0x0000000000000000
> shpchp 37201 0 - Live 0x0000000000000000
> soundcore 12680 1 snd, Live 0x0000000000000000
> lpc_ich 21163 0 - Live 0x0000000000000000
> lp 17799 0 - Live 0x0000000000000000
> mei_me 18578 0 - Live 0x0000000000000000
> mei 82671 1 mei_me, Live 0x0000000000000000
> apple_bl 13993 1 apple_gmux, Live 0x0000000000000000
> parport 42481 3 parport_pc,ppdev,lp, Live 0x0000000000000000
> bcma 52421 1 b43, Live 0x0000000000000000
> mac_hid 13253 0 - Live 0x0000000000000000
> video 19859 2 i915,apple_gmux, Live 0x0000000000000000
> hid_generic 12548 0 - Live 0x0000000000000000
> usbhid 53067 0 - Live 0x0000000000000000
> hid 106254 6
> hid_magicmouse,hidp,hid_roccat_koneplus,hid_appleir,hid_generic,usbhid, Live
> 0x0000000000000000
> tg3 174880 0 - Live 0x0000000000000000
> ptp 18980 1 tg3, Live 0x0000000000000000
> firewire_ohci 45158 0 - Live 0x0000000000000000
> pps_core 19381 1 ptp, Live 0x0000000000000000
> firewire_core 69362 1 firewire_ohci, Live 0x0000000000000000
> sdhci_pci 19241 0 - Live 0x0000000000000000
> crc_itu_t 12707 1 firewire_core, Live 0x0000000000000000
> sdhci 43409 1 sdhci_pci, Live 0x0000000000000000
>
> [7.4.] A: /proc/ioports
>
> 0000-0cf7 : PCI Bus 0000:00
> 0000-001f : dma1
> 0020-0021 : pic1
> 0040-0043 : timer0
> 0050-0053 : timer1
> 0060-0060 : keyboard
> 0062-0062 : EC data
> 0064-0064 : keyboard
> 0066-0066 : EC cmd
> 0070-0077 : rtc0
> 0080-008f : dma page reg
> 00a0-00a1 : pic2
> 00c0-00df : dma2
> 00f0-00ff : fpu
> 0300-031f : applesmc
> 0400-0403 : ACPI PM1a_EVT_BLK
> 0404-0405 : ACPI PM1a_CNT_BLK
> 0408-040b : ACPI PM_TMR
> 0410-0415 : ACPI CPU throttle
> 0420-042f : ACPI GPE0_BLK
> 0430-0433 : iTCO_wdt
> 0450-0450 : ACPI PM2_CNT_BLK
> 0460-047f : iTCO_wdt
> 0500-057f : pnp 00:04
> 0cf8-0cff : PCI conf1
> 0d00-ffff : PCI Bus 0000:00
> 1000-100f : pnp 00:04
> 2000-203f : 0000:00:02.0
> 2060-206f : 0000:00:1f.2
> 2060-206f : ata_piix
> 20c0-20df : 0000:00:1d.0
> 20c0-20df : uhci_hcd
> 2120-213f : 0000:00:1a.0
> 2120-213f : uhci_hcd
> 2140-2147 : 0000:00:1f.2
> 2140-2147 : ata_piix
> 2148-214f : 0000:00:1f.2
> 2148-214f : ata_piix
> 2158-215b : 0000:00:1f.2
> 2158-215b : ata_piix
> 215c-215f : 0000:00:1f.2
> 215c-215f : ata_piix
> 3000-3fff : PCI Bus 0000:06
> efa0-efbf : 0000:00:1f.3
> ffe0-ffef : 0000:00:1f.2
> ffe0-ffef : ata_piix
>
> [7.4.] B: /proc/iomem
>
> 00000000-00000fff : reserved
> 00001000-0008efff : System RAM
> 0008f000-0008ffff : reserved
> 00090000-0009fbff : System RAM
> 0009fc00-000fffff : reserved
> 000a0000-000bffff : PCI Bus 0000:00
> 000c0000-000cedff : Video ROM
> 000f0000-000fffff : System ROM
> 00100000-1fffffff : System RAM
> 01000000-0174d25d : Kernel code
> 0174d25e-01d1a3bf : Kernel data
> 01e74000-01fdafff : Kernel bss
> 20000000-201fffff : reserved
> 20000000-201fffff : pnp 00:09
> 20200000-3fffffff : System RAM
> 40000000-401fffff : reserved
> 40000000-401fffff : pnp 00:09
> 40200000-8ad33fff : System RAM
> 8ad34000-8ad5efff : ACPI Non-volatile Storage
> 8ad5f000-8afa1fff : ACPI Tables
> 8afa2000-8affefff : reserved
> 8afff000-8affffff : ACPI Tables
> 8b000000-8f9fffff : reserved
> 8ba00000-8f9fffff : Graphics Stolen Memory
> 8fa00000-feafffff : PCI Bus 0000:00
> 90000000-9fffffff : 0000:00:02.0
> 90000000-9012bfff : BOOTFB
> a0000000-a03fffff : 0000:00:02.0
> a0400000-a04fffff : PCI Bus 0000:02
> a0400000-a040ffff : 0000:02:00.0
> a0400000-a040ffff : tg3
> a0410000-a041ffff : 0000:02:00.0
> a0410000-a041ffff : tg3
> a0420000-a042ffff : 0000:02:00.1
> a0420000-a042ffff : mmc0
> a0500000-a05fffff : PCI Bus 0000:04
> a0500000-a05fffff : PCI Bus 0000:05
> a0500000-a0503fff : 0000:05:00.0
> a0504000-a05047ff : 0000:05:00.0
> a0504000-a05047ff : firewire_ohci
> a0600000-a06fffff : PCI Bus 0000:03
> a0600000-a0603fff : 0000:03:00.0
> a0600000-a0603fff : bcma-pci-bridge
> a0700000-a07fffff : PCI Bus 0000:02
> a0800000-a08fffff : PCI Bus 0000:01
> a0900000-a0903fff : 0000:00:1b.0
> a0900000-a0903fff : ICH HD audio
> a0906800-a0906bff : 0000:00:1d.7
> a0906800-a0906bff : ehci_hcd
> a0906c00-a0906fff : 0000:00:1a.7
> a0906c00-a0906fff : ehci_hcd
> a0907000-a09070ff : 0000:00:1f.3
> a0907100-a090710f : 0000:00:16.0
> a0907100-a090710f : mei_me
> a0a00000-a4efffff : PCI Bus 0000:06
> a4f00000-a8efffff : PCI Bus 0000:06
> e0000000-efffffff : reserved
> e0000000-efffffff : pnp 00:08
> e0000000-e9cfffff : PCI MMCONFIG 0000 [bus 00-9c]
> fec00000-fec00fff : reserved
> fec00000-fec003ff : IOAPIC 0
> fed00000-fed03fff : reserved
> fed00000-fed003ff : HPET 0
> fed00000-fed003ff : pnp 00:02
> fed10000-fed13fff : reserved
> fed18000-fed19fff : reserved
> fed18000-fed18fff : pnp 00:08
> fed19000-fed19fff : pnp 00:08
> fed1c000-fed1ffff : reserved
> fed1c000-fed1ffff : pnp 00:08
> fed1f410-fed1f414 : iTCO_wdt
> fed20000-fed3ffff : pnp 00:08
> fed40000-fed44fff : PCI Bus 0000:00
> fed45000-fed8ffff : pnp 00:08
> fed90000-fed93fff : pnp 00:08
> fee00000-fee00fff : Local APIC
> fee00000-fee00fff : reserved
> ff800000-ffffffff : reserved
> 100000000-26fdfffff : System RAM
> 26fe00000-26fffffff : RAM buffer
>
> [7.5.] lspci -vvv
>
> 00:00.0 Host bridge: Intel Corporation 2nd Generation Core Processor Family
> DRAM Controller (rev 09)
> Subsystem: Apple Inc. Device 00e6
> Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort+ >SERR- <PERR- INTx-
> Latency: 0
> Capabilities: [e0] Vendor Specific Information: Len=0c <?>
>
> 00:01.0 PCI bridge: Intel Corporation Xeon E3-1200/2nd Generation Core
> Processor Family PCI Express Root Port (rev 09) (prog-if 00 [Normal decode])
> Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx+
> Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0, Cache Line Size: 256 bytes
> Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
> I/O behind bridge: 0000f000-00000fff
> Memory behind bridge: a0800000-a08fffff
> Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff
> Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort- <SERR- <PERR-
> BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
> PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
> Capabilities: [88] Subsystem: Apple Inc. Device 00e6
> Capabilities: [80] Power Management version 3
> Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
> PME(D0+,D1-,D2-,D3hot+,D3cold+)
> Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
> Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit-
> Address: fee0f00c Data: 4191
> Capabilities: [a0] Express (v2) Root Port (Slot+), MSI 00
> DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1
> <1us
> ExtTag- RBE+ FLReset-
> DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
> RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
> MaxPayload 128 bytes, MaxReadReq 128 bytes
> DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
> LnkCap: Port #2, Speed 5GT/s, Width x8, ASPM L0s L1, Latency L0
> <1us, L1 <4us
> ClockPM- Surprise- LLActRep- BwNot+
> LnkCtl: ASPM Disabled; RCB 64 bytes Disabled+ Retrain- CommClk-
> ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
> LnkSta: Speed 2.5GT/s, Width x0, TrErr- Train- SlotClk+ DLActive-
> BWMgmt- ABWMgmt-
> SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug- Surprise-
> Slot #1, PowerLimit 75.000W; Interlock- NoCompl+
> SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt- HPIrq-
> LinkChg-
> Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock-
> SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet-
> Interlock-
> Changed: MRL- PresDet- LinkState-
> RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna+
> CRSVisible-
> RootCap: CRSVisible-
> RootSta: PME ReqID 0000, PMEStatus- PMEPending-
> DevCap2: Completion Timeout: Not Supported, TimeoutDis- ARIFwd-
> DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- ARIFwd-
> LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-,
> Selectable De-emphasis: -3.5dB
> Transmit Margin: Normal Operating Range, EnterModifiedCompliance-
> ComplianceSOS-
> Compliance De-emphasis: -6dB
> LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete-,
> EqualizationPhase1-
> EqualizationPhase2-, EqualizationPhase3-,
> LinkEqualizationRequest-
> Capabilities: [100 v1] Virtual Channel
> Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
> Arb: Fixed- WRR32- WRR64- WRR128-
> Ctrl: ArbSelect=Fixed
> Status: InProgress-
> VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
> Arb: Fixed+ WRR32- WRR64- WRR128- TWRR128- WRR256-
> Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
> Status: NegoPending- InProgress-
> Capabilities: [140 v1] Root Complex Link
> Desc: PortNumber=02 ComponentID=01 EltType=Config
> Link0: Desc: TargetPort=00 TargetComponent=01 AssocRCRB-
> LinkType=MemMapped LinkValid+
> Addr: 00000000fed19000
> Kernel driver in use: pcieport
>
> 00:01.1 PCI bridge: Intel Corporation Xeon E3-1200/2nd Generation Core
> Processor Family PCI Express Root Port (rev 09) (prog-if 00 [Normal decode])
> Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx+
> Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0, Cache Line Size: 256 bytes
> Bus: primary=00, secondary=06, subordinate=9c, sec-latency=0
> I/O behind bridge: 00003000-00003fff
> Memory behind bridge: a0a00000-a4efffff
> Prefetchable memory behind bridge: 00000000a4f00000-00000000a8efffff
> Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort- <SERR- <PERR-
> BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
> PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
> Capabilities: [88] Subsystem: Apple Inc. Device 00e6
> Capabilities: [80] Power Management version 3
> Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
> PME(D0+,D1-,D2-,D3hot+,D3cold+)
> Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
> Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit-
> Address: fee0f00c Data: 41a1
> Capabilities: [a0] Express (v2) Root Port (Slot+), MSI 00
> DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1
> <1us
> ExtTag- RBE+ FLReset-
> DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
> RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
> MaxPayload 128 bytes, MaxReadReq 128 bytes
> DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
> LnkCap: Port #3, Speed 5GT/s, Width x8, ASPM L0s L1, Latency L0
> <256ns, L1 <4us
> ClockPM- Surprise- LLActRep- BwNot+
> LnkCtl: ASPM Disabled; RCB 64 bytes Disabled+ Retrain- CommClk+
> ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
> LnkSta: Speed 5GT/s, Width x4, TrErr- Train- SlotClk+ DLActive-
> BWMgmt+ ABWMgmt-
> SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug- Surprise-
> Slot #2, PowerLimit 75.000W; Interlock- NoCompl+
> SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt- HPIrq-
> LinkChg-
> Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock-
> SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet+
> Interlock-
> Changed: MRL- PresDet+ LinkState-
> RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna+
> CRSVisible-
> RootCap: CRSVisible-
> RootSta: PME ReqID 0000, PMEStatus- PMEPending-
> DevCap2: Completion Timeout: Not Supported, TimeoutDis- ARIFwd-
> DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- ARIFwd-
> LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-,
> Selectable De-emphasis: -3.5dB
> Transmit Margin: Normal Operating Range, EnterModifiedCompliance-
> ComplianceSOS-
> Compliance De-emphasis: -6dB
> LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete-,
> EqualizationPhase1-
> EqualizationPhase2-, EqualizationPhase3-,
> LinkEqualizationRequest-
> Capabilities: [100 v1] Virtual Channel
> Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
> Arb: Fixed- WRR32- WRR64- WRR128-
> Ctrl: ArbSelect=Fixed
> Status: InProgress-
> VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
> Arb: Fixed+ WRR32- WRR64- WRR128- TWRR128- WRR256-
> Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
> Status: NegoPending- InProgress-
> Capabilities: [140 v1] Root Complex Link
> Desc: PortNumber=03 ComponentID=01 EltType=Config
> Link0: Desc: TargetPort=00 TargetComponent=01 AssocRCRB-
> LinkType=MemMapped LinkValid+
> Addr: 00000000fed19000
> Kernel driver in use: pcieport
>
> 00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core
> Processor Family Integrated Graphics Controller (rev 09) (prog-if 00 [VGA
> controller])
> Subsystem: Apple Inc. Device 00e6
> Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx+
> Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0
> Interrupt: pin A routed to IRQ 46
> Region 0: Memory at a0000000 (64-bit, non-prefetchable) [size=4M]
> Region 2: Memory at 90000000 (64-bit, prefetchable) [size=256M]
> Region 4: I/O ports at 2000 [size=64]
> Expansion ROM at <unassigned> [disabled]
> Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit-
> Address: fee0f00c Data: 4152
> Capabilities: [d0] Power Management version 2
> Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA
> PME(D0-,D1-,D2-,D3hot-,D3cold-)
> Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
> Capabilities: [a4] PCI Advanced Features
> AFCap: TP+ FLR+
> AFCtrl: FLR-
> AFStatus: TP-
> Kernel driver in use: i915
>
> 00:16.0 Communication controller: Intel Corporation 6 Series/C200 Series
> Chipset Family MEI Controller #1 (rev 04)
> Subsystem: Intel Corporation Apple MacBookPro8,2 [Core i7, 15", 2011]
> Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx+
> Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0
> Interrupt: pin A routed to IRQ 45
> Region 0: Memory at a0907100 (64-bit, non-prefetchable) [size=16]
> Capabilities: [50] Power Management version 3
> Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
> PME(D0+,D1-,D2-,D3hot+,D3cold+)
> Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
> Capabilities: [8c] MSI: Enable+ Count=1/1 Maskable- 64bit+
> Address: 00000000fee0f00c Data: 4142
> Kernel driver in use: mei_me
>
> 00:1a.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family
> USB Universal Host Controller #5 (rev 05) (prog-if 00 [UHCI])
> Subsystem: Intel Corporation Apple MacBookPro8,2 [Core i7, 15", 2011]
> Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0
> Interrupt: pin B routed to IRQ 21
> Region 4: I/O ports at 2120 [size=32]
> Capabilities: [50] PCI Advanced Features
> AFCap: TP+ FLR+
> AFCtrl: FLR-
> AFStatus: TP-
> Kernel driver in use: uhci_hcd
>
> 00:1a.7 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family
> USB Enhanced Host Controller #2 (rev 05) (prog-if 20 [EHCI])
> Subsystem: Intel Corporation Apple MacBookPro8,2 [Core i7, 15", 2011]
> Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0
> Interrupt: pin A routed to IRQ 23
> Region 0: Memory at a0906c00 (32-bit, non-prefetchable) [size=1K]
> Capabilities: [50] Power Management version 2
> Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA
> PME(D0+,D1-,D2-,D3hot+,D3cold+)
> Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
> Capabilities: [58] Debug port: BAR=1 offset=00a0
> Capabilities: [98] PCI Advanced Features
> AFCap: TP+ FLR+
> AFCtrl: FLR-
> AFStatus: TP+
> Kernel driver in use: ehci-pci
>
> 00:1b.0 Audio device: Intel Corporation 6 Series/C200 Series Chipset Family
> High Definition Audio Controller (rev 05)
> Subsystem: Intel Corporation Apple MacBookPro8,2 [Core i7, 15", 2011]
> Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx+
> Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0, Cache Line Size: 256 bytes
> Interrupt: pin A routed to IRQ 47
> Region 0: Memory at a0900000 (64-bit, non-prefetchable) [size=16K]
> Capabilities: [50] Power Management version 2
> Flags: PMEClk- DSI- D1- D2- AuxCurrent=55mA
> PME(D0+,D1-,D2-,D3hot+,D3cold+)
> Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
> Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit+
> Address: 00000000fee0f00c Data: 4162
> Capabilities: [70] Express (v1) Root Complex Integrated Endpoint, MSI 00
> DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1
> <1us
> ExtTag- RBE- FLReset+
> DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
> RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
> MaxPayload 128 bytes, MaxReadReq 128 bytes
> DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend-
> LnkCap: Port #0, Speed unknown, Width x0, ASPM unknown, Latency L0
> <64ns, L1 <1us
> ClockPM- Surprise- LLActRep- BwNot-
> LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk-
> ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
> LnkSta: Speed unknown, Width x0, TrErr- Train- SlotClk- DLActive-
> BWMgmt- ABWMgmt-
> Capabilities: [100 v1] Virtual Channel
> Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
> Arb: Fixed- WRR32- WRR64- WRR128-
> Ctrl: ArbSelect=Fixed
> Status: InProgress-
> VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
> Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
> Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=01
> Status: NegoPending- InProgress-
> VC1: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
> Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
> Ctrl: Enable+ ID=1 ArbSelect=Fixed TC/VC=22
> Status: NegoPending- InProgress-
> Capabilities: [130 v1] Root Complex Link
> Desc: PortNumber=0f ComponentID=00 EltType=Config
> Link0: Desc: TargetPort=00 TargetComponent=00 AssocRCRB-
> LinkType=MemMapped LinkValid+
> Addr: 00000000fed1c000
> Kernel driver in use: snd_hda_intel
>
> 00:1c.0 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI
> Express Root Port 1 (rev b5) (prog-if 00 [Normal decode])
> Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx+
> Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0, Cache Line Size: 256 bytes
> Bus: primary=00, secondary=02, subordinate=02, sec-latency=0
> I/O behind bridge: 0000f000-00000fff
> Memory behind bridge: a0700000-a07fffff
> Prefetchable memory behind bridge: 00000000a0400000-00000000a04fffff
> Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort+ <SERR- <PERR-
> BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
> PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
> Capabilities: [40] Express (v2) Root Port (Slot+), MSI 00
> DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1
> <1us
> ExtTag- RBE+ FLReset-
> DevCtl: Report errors: Correctable- Non-Fatal+ Fatal+ Unsupported+
> RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
> MaxPayload 128 bytes, MaxReadReq 128 bytes
> DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend-
> LnkCap: Port #1, Speed 5GT/s, Width x1, ASPM L0s L1, Latency L0
> <512ns, L1 <16us
> ClockPM- Surprise- LLActRep+ BwNot-
> LnkCtl: ASPM L1 Enabled; RCB 64 bytes Disabled- Retrain- CommClk+
> ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
> LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive+
> BWMgmt+ ABWMgmt-
> SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug- Surprise-
> Slot #0, PowerLimit 10.000W; Interlock- NoCompl+
> SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt- HPIrq-
> LinkChg-
> Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock-
> SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet+
> Interlock-
> Changed: MRL- PresDet- LinkState+
> RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna+
> CRSVisible-
> RootCap: CRSVisible-
> RootSta: PME ReqID 0000, PMEStatus- PMEPending-
> DevCap2: Completion Timeout: Range BC, TimeoutDis+ ARIFwd-
> DevCtl2: Completion Timeout: 260ms to 900ms, TimeoutDis- ARIFwd-
> LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-,
> Selectable De-emphasis: -6dB
> Transmit Margin: Normal Operating Range, EnterModifiedCompliance-
> ComplianceSOS-
> Compliance De-emphasis: -6dB
> LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete-,
> EqualizationPhase1-
> EqualizationPhase2-, EqualizationPhase3-,
> LinkEqualizationRequest-
> Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit-
> Address: fee0f00c Data: 41b1
> Capabilities: [90] Subsystem: Intel Corporation Apple MacBookPro8,2 [Core
> i7, 15", 2011]
> Capabilities: [a0] Power Management version 2
> Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
> PME(D0+,D1-,D2-,D3hot+,D3cold+)
> Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
> Kernel driver in use: pcieport
>
> 00:1c.1 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI
> Express Root Port 2 (rev b5) (prog-if 00 [Normal decode])
> Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx+
> Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0, Cache Line Size: 256 bytes
> Bus: primary=00, secondary=03, subordinate=03, sec-latency=0
> I/O behind bridge: 0000f000-00000fff
> Memory behind bridge: a0600000-a06fffff
> Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff
> Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort+ <SERR- <PERR-
> BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
> PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
> Capabilities: [40] Express (v2) Root Port (Slot+), MSI 00
> DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1
> <1us
> ExtTag- RBE+ FLReset-
> DevCtl: Report errors: Correctable- Non-Fatal+ Fatal+ Unsupported+
> RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
> MaxPayload 128 bytes, MaxReadReq 128 bytes
> DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend-
> LnkCap: Port #2, Speed 5GT/s, Width x1, ASPM L0s L1, Latency L0
> <512ns, L1 <16us
> ClockPM- Surprise- LLActRep+ BwNot-
> LnkCtl: ASPM L0s L1 Enabled; RCB 64 bytes Disabled- Retrain-
> CommClk+
> ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
> LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive+
> BWMgmt+ ABWMgmt-
> SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug- Surprise-
> Slot #0, PowerLimit 10.000W; Interlock- NoCompl+
> SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt- HPIrq-
> LinkChg-
> Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock-
> SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet+
> Interlock-
> Changed: MRL- PresDet- LinkState+
> RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna+
> CRSVisible-
> RootCap: CRSVisible-
> RootSta: PME ReqID 0000, PMEStatus- PMEPending-
> DevCap2: Completion Timeout: Range BC, TimeoutDis+ ARIFwd-
> DevCtl2: Completion Timeout: 260ms to 900ms, TimeoutDis- ARIFwd-
> LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-,
> Selectable De-emphasis: -6dB
> Transmit Margin: Normal Operating Range, EnterModifiedCompliance-
> ComplianceSOS-
> Compliance De-emphasis: -6dB
> LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete-,
> EqualizationPhase1-
> EqualizationPhase2-, EqualizationPhase3-,
> LinkEqualizationRequest-
> Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit-
> Address: fee0f00c Data: 41d1
> Capabilities: [90] Subsystem: Intel Corporation Apple MacBookPro8,2 [Core
> i7, 15", 2011]
> Capabilities: [a0] Power Management version 2
> Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
> PME(D0+,D1-,D2-,D3hot+,D3cold+)
> Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
> Kernel driver in use: pcieport
>
> 00:1c.2 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI
> Express Root Port 3 (rev b5) (prog-if 00 [Normal decode])
> Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx+
> Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0, Cache Line Size: 256 bytes
> Bus: primary=00, secondary=04, subordinate=05, sec-latency=0
> I/O behind bridge: 0000f000-00000fff
> Memory behind bridge: a0500000-a05fffff
> Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff
> Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort+ <SERR- <PERR-
> BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
> PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
> Capabilities: [40] Express (v2) Root Port (Slot+), MSI 00
> DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1
> <1us
> ExtTag- RBE+ FLReset-
> DevCtl: Report errors: Correctable- Non-Fatal+ Fatal+ Unsupported+
> RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
> MaxPayload 128 bytes, MaxReadReq 128 bytes
> DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend-
> LnkCap: Port #3, Speed 5GT/s, Width x1, ASPM L0s L1, Latency L0
> <512ns, L1 <16us
> ClockPM- Surprise- LLActRep+ BwNot-
> LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
> ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
> LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive+
> BWMgmt+ ABWMgmt-
> SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug- Surprise-
> Slot #0, PowerLimit 10.000W; Interlock- NoCompl+
> SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt- HPIrq-
> LinkChg-
> Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock-
> SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet+
> Interlock-
> Changed: MRL- PresDet- LinkState+
> RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna+
> CRSVisible-
> RootCap: CRSVisible-
> RootSta: PME ReqID 0000, PMEStatus- PMEPending-
> DevCap2: Completion Timeout: Range BC, TimeoutDis+ ARIFwd-
> DevCtl2: Completion Timeout: 260ms to 900ms, TimeoutDis- ARIFwd-
> LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-,
> Selectable De-emphasis: -6dB
> Transmit Margin: Normal Operating Range, EnterModifiedCompliance-
> ComplianceSOS-
> Compliance De-emphasis: -6dB
> LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete-,
> EqualizationPhase1-
> EqualizationPhase2-, EqualizationPhase3-,
> LinkEqualizationRequest-
> Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit-
> Address: fee0f00c Data: 4122
> Capabilities: [90] Subsystem: Intel Corporation Apple MacBookPro8,2 [Core
> i7, 15", 2011]
> Capabilities: [a0] Power Management version 2
> Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
> PME(D0+,D1-,D2-,D3hot+,D3cold+)
> Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
> Kernel driver in use: pcieport
>
> 00:1d.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family
> USB Universal Host Controller #1 (rev 05) (prog-if 00 [UHCI])
> Subsystem: Intel Corporation Apple MacBookPro8,2 [Core i7, 15", 2011]
> Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0
> Interrupt: pin B routed to IRQ 19
> Region 4: I/O ports at 20c0 [size=32]
> Capabilities: [50] PCI Advanced Features
> AFCap: TP+ FLR+
> AFCtrl: FLR-
> AFStatus: TP-
> Kernel driver in use: uhci_hcd
>
> 00:1d.7 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family
> USB Enhanced Host Controller #1 (rev 05) (prog-if 20 [EHCI])
> Subsystem: Intel Corporation Apple MacBookPro8,2 [Core i7, 15", 2011]
> Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0
> Interrupt: pin A routed to IRQ 22
> Region 0: Memory at a0906800 (32-bit, non-prefetchable) [size=1K]
> Capabilities: [50] Power Management version 2
> Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA
> PME(D0+,D1-,D2-,D3hot+,D3cold+)
> Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
> Capabilities: [58] Debug port: BAR=1 offset=00a0
> Capabilities: [98] PCI Advanced Features
> AFCap: TP+ FLR+
> AFCtrl: FLR-
> AFStatus: TP-
> Kernel driver in use: ehci-pci
>
> 00:1f.0 ISA bridge: Intel Corporation HM65 Express Chipset Family LPC
> Controller (rev 05)
> Subsystem: Intel Corporation Apple MacBookPro8,2 [Core i7, 15", 2011]
> Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0
> Capabilities: [e0] Vendor Specific Information: Len=0c <?>
> Kernel driver in use: lpc_ich
>
> 00:1f.2 IDE interface: Intel Corporation 6 Series/C200 Series Chipset Family 4
> port SATA IDE Controller (rev 05) (prog-if 8f [Master SecP SecO PriP PriO])
> Subsystem: Intel Corporation Device 7270
> Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0
> Interrupt: pin B routed to IRQ 19
> Region 0: I/O ports at 2148 [size=8]
> Region 1: I/O ports at 215c [size=4]
> Region 2: I/O ports at 2140 [size=8]
> Region 3: I/O ports at 2158 [size=4]
> Region 4: I/O ports at 2060 [size=16]
> Region 5: I/O ports at ffe0 [size=16]
> Capabilities: [70] Power Management version 3
> Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
> PME(D0-,D1-,D2-,D3hot-,D3cold-)
> Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
> Capabilities: [b0] PCI Advanced Features
> AFCap: TP+ FLR+
> AFCtrl: FLR-
> AFStatus: TP-
> Kernel driver in use: ata_piix
>
> 00:1f.3 SMBus: Intel Corporation 6 Series/C200 Series Chipset Family SMBus
> Controller (rev 05)
> Subsystem: Intel Corporation Apple MacBookPro8,2 [Core i7, 15", 2011]
> Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx-
> Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Interrupt: pin C routed to IRQ 11
> Region 0: Memory at a0907000 (64-bit, non-prefetchable) [size=256]
> Region 4: I/O ports at efa0 [size=32]
>
> 02:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM57765 Gigabit
> Ethernet PCIe (rev 10)
> Subsystem: Broadcom Corporation NetXtreme BCM57765 Gigabit Ethernet PCIe
> Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx+
> Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0, Cache Line Size: 256 bytes
> Interrupt: pin A routed to IRQ 16
> Region 0: Memory at a0400000 (64-bit, prefetchable) [size=64K]
> Region 2: Memory at a0410000 (64-bit, prefetchable) [size=64K]
> Capabilities: [48] Power Management version 3
> Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
> PME(D0+,D1-,D2-,D3hot+,D3cold+)
> Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=1 PME-
> Capabilities: [58] MSI: Enable- Count=1/8 Maskable- 64bit+
> Address: 0000000000000000 Data: 0000
> Capabilities: [a0] MSI-X: Enable+ Count=6 Masked-
> Vector table: BAR=2 offset=00000000
> PBA: BAR=2 offset=00000120
> Capabilities: [ac] Express (v2) Endpoint, MSI 00
> DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <4us, L1
> <64us
> ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
> DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
> RlxdOrd- ExtTag- PhantFunc- AuxPwr+ NoSnoop-
> MaxPayload 128 bytes, MaxReadReq 4096 bytes
> DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend-
> LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0
> <2us, L1 <64us
> ClockPM+ Surprise- LLActRep- BwNot-
> LnkCtl: ASPM L1 Enabled; RCB 64 bytes Disabled- Retrain- CommClk+
> ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
> LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive-
> BWMgmt- ABWMgmt-
> DevCap2: Completion Timeout: Range ABCD, TimeoutDis+
> DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
> LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-,
> Selectable De-emphasis: -6dB
> Transmit Margin: Normal Operating Range, EnterModifiedCompliance-
> ComplianceSOS-
> Compliance De-emphasis: -6dB
> LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete-,
> EqualizationPhase1-
> EqualizationPhase2-, EqualizationPhase3-,
> LinkEqualizationRequest-
> Capabilities: [100 v1] Advanced Error Reporting
> UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF-
> MalfTLP- ECRC- UnsupReq- ACSViol-
> UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF-
> MalfTLP- ECRC- UnsupReq- ACSViol-
> UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+
> MalfTLP+ ECRC- UnsupReq- ACSViol-
> CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
> CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
> AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
> Capabilities: [13c v1] Device Serial Number 00-00-3c-07-54-53-3a-a7
> Capabilities: [150 v1] Power Budgeting <?>
> Capabilities: [160 v1] Virtual Channel
> Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
> Arb: Fixed- WRR32- WRR64- WRR128-
> Ctrl: ArbSelect=Fixed
> Status: InProgress-
> VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
> Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
> Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
> Status: NegoPending- InProgress-
> Kernel driver in use: tg3
>
> 02:00.1 SD Host controller: Broadcom Corporation BCM57765/57785 SDXC/MMC Card
> Reader (rev 10) (prog-if 01)
> Subsystem: Broadcom Corporation Device 0000
> Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0, Cache Line Size: 256 bytes
> Interrupt: pin B routed to IRQ 17
> Region 0: Memory at a0420000 (64-bit, prefetchable) [size=64K]
> Capabilities: [48] Power Management version 3
> Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
> PME(D0+,D1-,D2-,D3hot+,D3cold+)
> Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=1 PME-
> Capabilities: [58] MSI: Enable- Count=1/1 Maskable- 64bit+
> Address: 0000000000000000 Data: 0000
> Capabilities: [ac] Express (v2) Endpoint, MSI 00
> DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <4us, L1
> <64us
> ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
> DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
> RlxdOrd+ ExtTag- PhantFunc- AuxPwr+ NoSnoop+
> MaxPayload 128 bytes, MaxReadReq 4096 bytes
> DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr+ TransPend-
> LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0
> <2us, L1 <64us
> ClockPM+ Surprise- LLActRep- BwNot-
> LnkCtl: ASPM L1 Enabled; RCB 64 bytes Disabled- Retrain- CommClk+
> ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
> LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive-
> BWMgmt- ABWMgmt-
> DevCap2: Completion Timeout: Range ABCD, TimeoutDis+
> DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
> LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-,
> Selectable De-emphasis: -6dB
> Transmit Margin: Normal Operating Range, EnterModifiedCompliance-
> ComplianceSOS-
> Compliance De-emphasis: -6dB
> LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete-,
> EqualizationPhase1-
> EqualizationPhase2-, EqualizationPhase3-,
> LinkEqualizationRequest-
> Capabilities: [100 v1] Advanced Error Reporting
> UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF-
> MalfTLP- ECRC- UnsupReq- ACSViol-
> UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF-
> MalfTLP- ECRC- UnsupReq- ACSViol-
> UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+
> MalfTLP+ ECRC- UnsupReq- ACSViol-
> CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
> CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
> AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
> Capabilities: [150 v1] Power Budgeting <?>
> Capabilities: [160 v1] Virtual Channel
> Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
> Arb: Fixed- WRR32- WRR64- WRR128-
> Ctrl: ArbSelect=Fixed
> Status: InProgress-
> VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
> Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
> Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
> Status: NegoPending- InProgress-
> Kernel driver in use: sdhci-pci
>
> 03:00.0 Network controller: Broadcom Corporation BCM4331 802.11a/b/g/n (rev
> 02)
> Subsystem: Broadcom Corporation BCM4331 802.11a/b/g/n
> Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0, Cache Line Size: 256 bytes
> Interrupt: pin A routed to IRQ 17
> Region 0: Memory at a0600000 (64-bit, non-prefetchable) [size=16K]
> Capabilities: [40] Power Management version 3
> Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA
> PME(D0-,D1-,D2-,D3hot-,D3cold-)
> Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=2 PME-
> Capabilities: [58] Vendor Specific Information: Len=78 <?>
> Capabilities: [48] MSI: Enable- Count=1/1 Maskable- 64bit+
> Address: 0000000000000000 Data: 0000
> Capabilities: [d0] Express (v1) Endpoint, MSI 00
> DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <4us, L1
> unlimited
> ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
> DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
> RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
> MaxPayload 128 bytes, MaxReadReq 512 bytes
> DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr+ TransPend-
> LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0
> <2us, L1 <32us
> ClockPM+ Surprise- LLActRep+ BwNot-
> LnkCtl: ASPM L0s L1 Enabled; RCB 64 bytes Disabled- Retrain-
> CommClk+
> ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
> LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive+
> BWMgmt- ABWMgmt-
> Capabilities: [100 v1] Advanced Error Reporting
> UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF-
> MalfTLP- ECRC- UnsupReq- ACSViol-
> UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF-
> MalfTLP- ECRC- UnsupReq- ACSViol-
> UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+
> MalfTLP+ ECRC- UnsupReq- ACSViol-
> CESta: RxErr- BadTLP- BadDLLP+ Rollover- Timeout- NonFatalErr+
> CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
> AERCap: First Error Pointer: 14, GenCap+ CGenEn- ChkCap+ ChkEn-
> Capabilities: [13c v1] Virtual Channel
> Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
> Arb: Fixed- WRR32- WRR64- WRR128-
> Ctrl: ArbSelect=Fixed
> Status: InProgress-
> VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
> Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
> Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
> Status: NegoPending- InProgress-
> Capabilities: [160 v1] Device Serial Number 00-00-00-ff-ff-00-00-00
> Capabilities: [16c v1] Power Budgeting <?>
> Kernel driver in use: bcma-pci-bridge
>
> 04:00.0 PCI bridge: Texas Instruments XIO2213A/B/XIO2221 PCI Express to PCI
> Bridge [Cheetah Express] (rev 01) (prog-if 00 [Normal decode])
> Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0, Cache Line Size: 256 bytes
> Bus: primary=04, secondary=05, subordinate=05, sec-latency=0
> I/O behind bridge: 0000f000-00000fff
> Memory behind bridge: a0500000-a05fffff
> Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff
> Secondary status: 66MHz+ FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort-
> <MAbort+ <SERR- <PERR-
> BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
> PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
> Capabilities: [50] Power Management version 3
> Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA
> PME(D0-,D1-,D2-,D3hot-,D3cold-)
> Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
> Bridge: PM- B3+
> Capabilities: [60] MSI: Enable- Count=1/16 Maskable- 64bit+
> Address: 0000000000000000 Data: 0000
> Capabilities: [80] Subsystem: Device 0000:0000
> Capabilities: [90] Express (v1) PCI/PCI-X Bridge, MSI 00
> DevCap: MaxPayload 512 bytes, PhantFunc 0, Latency L0s <64ns, L1
> <1us
> ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
> DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
> RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop+ BrConfRtry-
> MaxPayload 128 bytes, MaxReadReq 512 bytes
> DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr- TransPend-
> LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0
> <512ns, L1 <16us
> ClockPM+ Surprise- LLActRep- BwNot-
> LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk+
> ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
> LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive-
> BWMgmt- ABWMgmt-
> Capabilities: [100 v1] Advanced Error Reporting
> UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF-
> MalfTLP- ECRC- UnsupReq+ ACSViol-
> UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF-
> MalfTLP- ECRC- UnsupReq- ACSViol-
> UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+
> MalfTLP+ ECRC- UnsupReq- ACSViol-
> CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
> CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
> AERCap: First Error Pointer: 14, GenCap+ CGenEn- ChkCap+ ChkEn-
>
> 05:00.0 FireWire (IEEE 1394): Texas Instruments XIO2213A/B/XIO2221 IEEE-1394b
> OHCI Controller [Cheetah Express] (rev 01) (prog-if 10 [OHCI])
> Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 248 (500ns min, 1000ns max), Cache Line Size: 64 bytes
> Interrupt: pin A routed to IRQ 18
> Region 0: Memory at a0504000 (32-bit, non-prefetchable) [size=2K]
> Region 1: Memory at a0500000 (32-bit, non-prefetchable) [size=16K]
> Capabilities: [44] Power Management version 3
> Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA
> PME(D0+,D1+,D2+,D3hot+,D3cold-)
> Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME+
> Kernel driver in use: firewire_ohci
>
> [7.6.] /proc/scsi/scsi :
>
> Attached devices:
> Host: scsi0 Channel: 00 Id: 00 Lun: 00
> Vendor: ATA Model: Hitachi HTS54505 Rev: PB4A
> Type: Direct-Access ANSI SCSI revision: 05
>
> [7.7.] git bisect log
>
> git bisect start
> # good: [8bb495e3f02401ee6f76d1b1d77f3ac9f079e376] Linux 3.10
> git bisect good 8bb495e3f02401ee6f76d1b1d77f3ac9f079e376
> # bad: [ad81f0545ef01ea651886dddac4bef6cec930092] Linux 3.11-rc1
> git bisect bad ad81f0545ef01ea651886dddac4bef6cec930092
> # good: [1286da8bc009cb2aee7f285e94623fc974c0c983] Merge tag 'sound-3.11' of
> git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
> git bisect good 1286da8bc009cb2aee7f285e94623fc974c0c983
> # bad: [1b375dc30710180c4b88cc59caba6e3481ec5c8b] mutex: Move ww_mutex
> definitions to ww_mutex.h
> git bisect bad 1b375dc30710180c4b88cc59caba6e3481ec5c8b
> # bad: [899dd388853071f5c8848545209d4e2c5d95b1d9] Merge tag
> 'for-linus-3.11-merge-window-part-1' of
> git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs
> git bisect bad 899dd388853071f5c8848545209d4e2c5d95b1d9
> # bad: [f5b63ac0f77ecab46796ba5d368ea5dd51834e6e] Merge branch 'for-linus' of
> git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
> git bisect bad f5b63ac0f77ecab46796ba5d368ea5dd51834e6e
> # bad: [3366dd9fa887ebbda4872e9554f853eaeda764be] Merge branch 'for-linus' of
> git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
> git bisect bad 3366dd9fa887ebbda4872e9554f853eaeda764be
> # good: [c039e3a8ddd52139d0f81711ecd757772f868b22] powerpc: Handle both new
> style and old style reserve maps
> git bisect good c039e3a8ddd52139d0f81711ecd757772f868b22
> # good: [e61aca5158a84932cf9fbbcbf8aef9cef63f5026] Merge branch 'kconfig-diet'
> from Dave Hansen
> git bisect good e61aca5158a84932cf9fbbcbf8aef9cef63f5026
> # good: [b8e0fe31a7c8623741f91bc27f925220341fdf81] HID: wiimote: support
> Nintendo Wii U Pro Controller
> git bisect good b8e0fe31a7c8623741f91bc27f925220341fdf81
> # bad: [08ec2dcc3527a20c619aca2fb36f800908256bac] Merge branches
> 'for-3.11/multitouch', 'for-3.11/sony' and 'for-3.11/upstream' into for-linus
> git bisect bad 08ec2dcc3527a20c619aca2fb36f800908256bac
> # good: [db58316892a5e9034efe718d4c1630788db7528f] Merge branches
> 'for-3.11/battery', 'for-3.11/elo', 'for-3.11/holtek' and
> 'for-3.11/i2c-hid-fixed' into for-linus
> git bisect good db58316892a5e9034efe718d4c1630788db7528f
> # bad: [a688393bd3fb27690a77f7ae8607b4969039bac5] HID: explain out-of-range
> check better
> git bisect bad a688393bd3fb27690a77f7ae8607b4969039bac5
> # bad: [b1a1442a23776756b254b69786848a94d92445ba] HID: core: fix reporting of
> raw events
> git bisect bad b1a1442a23776756b254b69786848a94d92445ba
> # good: [68e353fe476e7dab4644b9e7b4979b72726397ae] HID: add support for Huion
> 580 tablet
> git bisect good 68e353fe476e7dab4644b9e7b4979b72726397ae
> # first bad commit: [b1a1442a23776756b254b69786848a94d92445ba] HID: core: fix
> reporting of raw events
>
> [7.8.] Information from syslog when kernel recovers
>
> Jan 26 00:55:46 gerrit-testing-1404 colord: Profile added:
> icc-e78de847fc92f70fe2135cbd74d84353
> Jan 26 00:55:48 gerrit-testing-1404 dbus[617]: [system] Activating service
> name='org.freedesktop.UDisks2' (using servicehelper)
> Jan 26 00:55:48 gerrit-testing-1404 udisksd[2304]: udisks daemon version 2.1.2
> starting
> Jan 26 00:55:48 gerrit-testing-1404 dbus[617]: [system] Successfully activated
> service 'org.freedesktop.UDisks2'
> Jan 26 00:55:48 gerrit-testing-1404 udisksd[2304]: Acquired the name
> org.freedesktop.UDisks2 on the system message bus
> Jan 26 00:55:49 gerrit-testing-1404 udisksd[2304]: Cleaning up mount point
> /media/gerrit/a0632e71-0eb0-47f5-878c-20d0533ba044 (device 8:6 is not mounted)
> Jan 26 00:56:04 gerrit-testing-1404 bluetoothd[647]: Endpoint unregistered:
> sender=:1.45 path=/MediaEndpoint/HFPAG
> Jan 26 00:56:04 gerrit-testing-1404 bluetoothd[647]: Endpoint unregistered:
> sender=:1.45 path=/MediaEndpoint/HFPHS
> Jan 26 00:56:04 gerrit-testing-1404 bluetoothd[647]: Endpoint unregistered:
> sender=:1.45 path=/MediaEndpoint/A2DPSource
> Jan 26 00:56:04 gerrit-testing-1404 bluetoothd[647]: Endpoint unregistered:
> sender=:1.45 path=/MediaEndpoint/A2DPSink
> Jan 26 00:56:24 gerrit-testing-1404 kernel: [ 174.632667] Bluetooth: HIDP
> (Human Interface Emulation) ver 1.2
> Jan 26 00:56:24 gerrit-testing-1404 kernel: [ 174.632685] Bluetooth: HIDP
> socket layer initialized
> Jan 26 00:56:27 gerrit-testing-1404 kernel: [ 177.740013] magicmouse
> 0005:05AC:030E.0008: unknown main item tag 0x0
> Jan 26 00:56:27 gerrit-testing-1404 kernel: [ 177.740083] input: as
> /devices/pci0000:00/0000:00:1a.7/usb1/1-1/1-1.1/1-1.1.3/1-1.1.3:1.0/bluetooth/hci0/hci0:12/input17
> Jan 26 00:56:27 gerrit-testing-1404 kernel: [ 177.740236] magicmouse
> 0005:05AC:030E.0008: input,hidraw2: BLUETOOTH HID v1.60 Mouse [] on
> 68:a8:6d:57:8f:80
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.211489] BUG: unable to
> handle kernel NULL pointer dereference at 0000000000000048
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.211556] IP:
> [<ffffffff8105cb16>] do_exit+0x2e6/0xa30
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.211592] PGD 0
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.211607] Thread overran
> stack, or stack corrupted
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.211635] Oops: 0000 [#1] SMP
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.211659] Modules linked in:
> hid_magicmouse hidp parport_pc ppdev rfcomm bnep b43 mac80211 i915
> intel_powerclamp coretemp kvm_intel kvm cfg80211 snd_hda_codec_hdmi
> snd_hda_codec_cirrus snd_hda_intel snd_hda_codec snd_usb_audio snd_usbmidi_lib
> drm_kms_helper snd_hwdep snd_pcm btusb drm bluetooth snd_page_alloc
> snd_seq_midi snd_seq_midi_event crc32_pclmul snd_rawmidi ghash_clmulni_intel
> snd_seq aesni_intel ssb aes_x86_64 lrw gf128mul glue_helper ablk_helper
> snd_seq_device cryptd snd_timer snd applesmc mei_me hid_roccat_koneplus mei
> input_polldev hid_roccat joydev hid_roccat_common hid_appleir microcode
> apple_gmux shpchp soundcore bcma i2c_algo_bit lp apple_bl parport video
> lpc_ich mac_hid hid_generic tg3 firewire_ohci usbhid firewire_core ptp hid
> sdhci_pci sdhci crc_itu_t pps_core
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212207] CPU: 0 PID: 2506
> Comm: syndaemon Not tainted 3.10.0-custom-step5 #6
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212247] Hardware name:
> Apple Inc. Macmini5,1/Mac-8ED6AF5B48C039E1, BIOS MM51.88Z.0077.B10.1201241549
> 01/24/2012
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212303] task:
> ffff88021e128000 ti: ffff88021e338000 task.ti: ffff88021e338000
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212343] RIP:
> 0010:[<ffffffff8105cb16>] [<ffffffff8105cb16>] do_exit+0x2e6/0xa30
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212389] RSP:
> 0018:ffff88021e339ec8 EFLAGS: 00010246
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212419] RAX:
> 0000000000000000 RBX: ffff88021e128000 RCX: 00000000000000b6
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212458] RDX:
> 00000000000000b6 RSI: 0000000000000001 RDI: 0000000000000001
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212496] RBP:
> ffff88021e339f38 R08: ffffffff81edc800 R09: 0000000000000001
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212534] R10:
> 0000000000000000 R11: ffffea0008798840 R12: ffff880253789a40
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212573] R13:
> ffff88021e128630 R14: ffff880253789aa8 R15: 00007fff52b704f8
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212612] FS:
> 0000000000000000(0000) GS:ffff88026fa00000(0000) knlGS:0000000000000000
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212655] CS: 0010 DS: 0000
> ES: 0000 CR0: 0000000080050033
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212686] CR2:
> 0000000000000048 CR3: 0000000001c0e000 CR4: 00000000000407f0
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212725] Stack:
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212738] ffff88021e128634
> 0000000101bec410 ffff88021e339f00 ffffffff8108f679
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212788] 0000000000000246
> 00007f7cb316e848 00007f7cb3173e80 ffff88021e339f18
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212836] 0000000000000246
> ffff88026436d500 0000000000000100 ffff88021e128000
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212884] Call Trace:
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212904]
> [<ffffffff8108f679>] ? vtime_account_user+0x69/0x80
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212939]
> [<ffffffff8105d2df>] do_group_exit+0x3f/0xa0
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212971]
> [<ffffffff8105d354>] SyS_exit_group+0x14/0x20
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.213006]
> [<ffffffff816d7d2f>] tracesys+0xe1/0xe6
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.213034] Code: ff 48 89 df
> e8 5c d1 0c 00 be 01 00 00 00 48 89 df e8 9f f5 06 00 44 8b 4d 9c 45 85 c9 0f
> 85 8b 04 00 00 48 8b 43 08 48 8b 40 08 <48> 8b 78 48 e8 31 dc 05 00 48 89 df
> e8 a9 f3 3e 00 48 89 df e8
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.213289] RIP
> [<ffffffff8105cb16>] do_exit+0x2e6/0xa30
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.213324] RSP
> <ffff88021e339ec8>
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.213344] CR2:
> 0000000000000048
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.226977] ---[ end trace
> 79422433cc8a77d4 ]---
> Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.226986] Fixing recursive
> fault but reboot is needed!
>
--
Jiri Kosina
SUSE Labs
^ permalink raw reply
* [PATCH RFC] Input: Add Microchip AR1021 i2c touchscreen
From: Christian Gmeiner @ 2014-01-30 9:29 UTC (permalink / raw)
To: linux-input; +Cc: Christian Gmeiner
This driver is quite simple and only supports the Touch
Reporting Protocol.
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
---
drivers/input/touchscreen/Kconfig | 12 ++
drivers/input/touchscreen/Makefile | 1 +
drivers/input/touchscreen/ar1021_i2c.c | 201 ++++++++++++++++++++++++++++++++
3 files changed, 214 insertions(+)
create mode 100644 drivers/input/touchscreen/ar1021_i2c.c
diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
index 07e9e82..15cc9a1 100644
--- a/drivers/input/touchscreen/Kconfig
+++ b/drivers/input/touchscreen/Kconfig
@@ -86,6 +86,18 @@ config TOUCHSCREEN_AD7879_SPI
To compile this driver as a module, choose M here: the
module will be called ad7879-spi.
+config TOUCHSCREEN_AR1021_I2C
+ tristate "Microchip AR1021 i2c touchscreen"
+ depends on I2C && OF
+ help
+ Say Y here if you have the Microchip AR1021 touchscreen controller
+ chip in your system.
+
+ If unsure, say N.
+
+ To compile this driver as a module, choose M here: the
+ module will be called microchip_ar1021_i2c.
+
config TOUCHSCREEN_ATMEL_MXT
tristate "Atmel mXT I2C Touchscreen"
depends on I2C
diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
index 62801f2..efaa328 100644
--- a/drivers/input/touchscreen/Makefile
+++ b/drivers/input/touchscreen/Makefile
@@ -12,6 +12,7 @@ obj-$(CONFIG_TOUCHSCREEN_AD7879) += ad7879.o
obj-$(CONFIG_TOUCHSCREEN_AD7879_I2C) += ad7879-i2c.o
obj-$(CONFIG_TOUCHSCREEN_AD7879_SPI) += ad7879-spi.o
obj-$(CONFIG_TOUCHSCREEN_ADS7846) += ads7846.o
+obj-$(CONFIG_TOUCHSCREEN_AR1021_I2C) += ar1021_i2c.o
obj-$(CONFIG_TOUCHSCREEN_ATMEL_MXT) += atmel_mxt_ts.o
obj-$(CONFIG_TOUCHSCREEN_ATMEL_TSADCC) += atmel_tsadcc.o
obj-$(CONFIG_TOUCHSCREEN_AUO_PIXCIR) += auo-pixcir-ts.o
diff --git a/drivers/input/touchscreen/ar1021_i2c.c b/drivers/input/touchscreen/ar1021_i2c.c
new file mode 100644
index 0000000..c77ce05
--- /dev/null
+++ b/drivers/input/touchscreen/ar1021_i2c.c
@@ -0,0 +1,201 @@
+/*
+ * Microchip AR1021 driver for I2C
+ *
+ * Author: Christian Gmeiner <christian.gmeiner@gmail.com>
+ *
+ * License: GPL as published by the FSF.
+ */
+
+#include <linux/module.h>
+#include <linux/input.h>
+#include <linux/of.h>
+#include <linux/i2c.h>
+#include <linux/slab.h>
+#include <linux/irq.h>
+#include <linux/interrupt.h>
+#include <linux/gpio.h>
+#include <asm/unaligned.h>
+
+#define AR1021_TOCUH_PKG_SIZE 5
+
+struct ar1021_i2c {
+ struct i2c_client *client;
+ struct input_dev *input;
+ u8 data[AR1021_TOCUH_PKG_SIZE];
+};
+
+static irqreturn_t ar1021_i2c_irq(int irq, void *dev_id)
+{
+ struct ar1021_i2c *ar1021 = dev_id;
+ struct input_dev *input = ar1021->input;
+ u8 *data = ar1021->data;
+ unsigned int x, y, button;
+ int error;
+
+ error = i2c_master_recv(ar1021->client,
+ ar1021->data, sizeof(ar1021->data));
+ if (error < 0)
+ goto out;
+
+ button = !(data[0] & BIT(0));
+ x = ((data[2] & 0x1f) << 7) | (data[1] & 0x7f);
+ y = ((data[4] & 0x1f) << 7) | (data[3] & 0x7f);
+
+ input_report_key(input, BTN_TOUCH, button);
+ input_report_abs(input, ABS_X, x);
+ input_report_abs(input, ABS_Y, y);
+ input_sync(input);
+
+out:
+ return IRQ_HANDLED;
+}
+
+static int ar1021_i2c_open(struct input_dev *dev)
+{
+ struct ar1021_i2c *wac_i2c = input_get_drvdata(dev);
+ struct i2c_client *client = wac_i2c->client;
+
+ enable_irq(client->irq);
+
+ return 0;
+}
+
+static void ar1021_i2c_close(struct input_dev *dev)
+{
+ struct ar1021_i2c *wac_i2c = input_get_drvdata(dev);
+ struct i2c_client *client = wac_i2c->client;
+
+ disable_irq(client->irq);
+}
+
+static int ar1021_i2c_probe(struct i2c_client *client,
+ const struct i2c_device_id *id)
+{
+ struct ar1021_i2c *ar1021;
+ struct input_dev *input;
+ int error;
+
+ if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
+ dev_err(&client->dev, "i2c_check_functionality error\n");
+ return -EIO;
+ }
+
+ ar1021 = devm_kzalloc(client->dev, sizeof(*ar1021), GFP_KERNEL);
+ input = input_allocate_device();
+ if (!ar1021 || !input) {
+ error = -ENOMEM;
+ goto err_free_mem;
+ }
+
+ ar1021->client = client;
+ ar1021->input = input;
+
+ input->name = "ar1021 I2C Touchscreen";
+ input->id.bustype = BUS_I2C;
+ input->dev.parent = &client->dev;
+ input->open = ar1021_i2c_open;
+ input->close = ar1021_i2c_close;
+
+ input->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
+
+ __set_bit(BTN_TOOL_PEN, input->keybit);
+
+ input_set_abs_params(input, ABS_X, 0, 4095, 0, 0);
+ input_set_abs_params(input, ABS_Y, 0, 4095, 0, 0);
+
+ input_set_drvdata(input, ar1021);
+
+ error = request_threaded_irq(client->irq, NULL, ar1021_i2c_irq,
+ IRQF_TRIGGER_LOW | IRQF_ONESHOT,
+ "ar1021_i2c", ar1021);
+ if (error) {
+ dev_err(&client->dev,
+ "Failed to enable IRQ, error: %d\n", error);
+ goto err_free_mem;
+ }
+
+ /* Disable the IRQ, we'll enable it in wac_i2c_open() */
+ disable_irq(client->irq);
+
+ error = input_register_device(ar1021->input);
+ if (error) {
+ dev_err(&client->dev,
+ "Failed to register input device, error: %d\n", error);
+ goto err_free_irq;
+ }
+
+ i2c_set_clientdata(client, ar1021);
+ return 0;
+
+err_free_irq:
+ free_irq(client->irq, ar1021);
+err_free_mem:
+ input_free_device(input);
+
+ return error;
+}
+
+static int ar1021_i2c_remove(struct i2c_client *client)
+{
+ struct ar1021_i2c *ar1021 = i2c_get_clientdata(client);
+
+ free_irq(client->irq, ar1021);
+ input_unregister_device(ar1021->input);
+
+ return 0;
+}
+
+#ifdef CONFIG_PM_SLEEP
+static int ar1021_i2c_suspend(struct device *dev)
+{
+ struct i2c_client *client = to_i2c_client(dev);
+
+ disable_irq(client->irq);
+
+ return 0;
+}
+
+static int ar1021_i2c_resume(struct device *dev)
+{
+ struct i2c_client *client = to_i2c_client(dev);
+
+ enable_irq(client->irq);
+
+ return 0;
+}
+#endif
+
+static SIMPLE_DEV_PM_OPS(ar1021_i2c_pm, ar1021_i2c_suspend, ar1021_i2c_resume);
+
+static const struct i2c_device_id ar1021_i2c_id[] = {
+ { "MICROCHIP_AR1021_I2C", 0 },
+ { },
+};
+MODULE_DEVICE_TABLE(i2c, ar1021_i2c_id);
+
+#ifdef CONFIG_OF
+static struct of_device_id ar1021_i2c_of_match[] = {
+ { .compatible = "mc,ar1021-i2c", },
+ { },
+};
+MODULE_DEVICE_TABLE(of, ar1021_i2c_of_match);
+#endif
+
+static struct i2c_driver ar1021_i2c_driver = {
+ .driver = {
+ .name = "ar1021_i2c",
+ .owner = THIS_MODULE,
+ .pm = &ar1021_i2c_pm,
+ .of_match_table = of_match_ptr(ar1021_i2c_of_match),
+ },
+
+ .probe = ar1021_i2c_probe,
+ .remove = ar1021_i2c_remove,
+ .id_table = ar1021_i2c_id,
+};
+module_i2c_driver(ar1021_i2c_driver);
+
+MODULE_AUTHOR("Christian Gmeiner <christian.gmeiner@gmail.com>");
+MODULE_DESCRIPTION("Microchip AR1021 I2C Driver");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:ar1021_i2c");
--
1.7.10.4
^ permalink raw reply related
* Re: Can I limit the scope of an input device to specific processes ?
From: Dr. Zimmermann @ 2014-01-30 9:25 UTC (permalink / raw)
To: Fabien André; +Cc: linux-input
In-Reply-To: <CAM18vYqBk7_WrUsdNQq7fjuPC1cm0vb1KTmJW7877OyYFeKj0g@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 8538 bytes --]
Am 29.01.2014 13:31, schrieb Fabien André:
> An alternative to X config file is the xinput command line tool
>
> $> xinput list
> to get the name and id of your device
> $>xinput float NAME_OR_ID
> to "detach" the device from the virtual core keyboard
> (the name will be stable while id can change after unplug or restart, thus
> name is a better candidate for scripting)
Hi Fabien,
that looks promising: I was able to separate our response-box-keyboards
from the core keyboard so that pressed (response-)keys are no longer
transmitted by default anymore.
Can You shortly point me to the next steps necessary?
-> Create e new core pointer/keyboard pair and connect the
reponse-box-keyboard to it?
Or is there a better forum to ask about X (input) stuff?
Thanx, Roger
>
>
>
> On Wed, Jan 29, 2014 at 10:44 AM, Dr. Zimmermann <
> R.Zimmermann@uke.uni-hamburg.de> wrote:
>
>> Am 28.01.2014 13:49, schrieb David Herrmann:
>>
>>> Hi
>>>
>>> Hi David,
>>
>> On Tue, Jan 28, 2014 at 1:27 PM, Dr. Zimmermann
>>> <R.Zimmermann@uke.uni-hamburg.de> wrote:
>>>
>>>> Am 28.01.2014 12:15, schrieb David Herrmann:
>>>>
>>>> Hi
>>>>>
>>>>> On Tue, Jan 28, 2014 at 11:20 AM, Dr. Zimmermann
>>>>> <R.Zimmermann@uke.uni-hamburg.de> wrote:
>>>>>
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> we've got a special type of keyboard which should only be available in
>>>>>> one
>>>>>> specific process and not publicly, as usually keyboards are.
>>>>>>
>>>>>> Is it possible to limit the scope of a specific keyboard?
>>>>>>
>>>>>> Or is there a more suited forum where to ask?
>>>>>>
>>>>>
>>>>
>>>> Hi David,
>>>>
>>>>
>>>>
>>>>> There is no such interface in the kernel. However, with careful
>>>>> access-management, you can get what you want by just allowing your
>>>>> single process access to the device. But I guess you are working with
>>>>> an X11 system, so a description of what you actually want to achieve
>>>>> would help a lot.
>>>>>
>>>>
>>>>
>>>> Thnx for Your quick reply.
>>>>
>>>> (Yes, we are using X. No, the problem is not specific to X: It'll also
>>>> occur
>>>> when You switch between system consoles.)
>>>>
>>>
>>> Just don't use the system-console for that. It's not intended for that
>>> purpose and no-one will enhance it to do device-separation (why would
>>> you.. it's mainly meant as system-administrator fallback). But see
>>> below..
>>>
>>
>> We've never intended to use it for our purposes, still the effect that
>> we've got is the same than under X.
>>
>>
>>> For research purposes we are measuring human brain activity under the
>>>> influence of external stimuli (visual/auditory/somatosensory). The
>>>> subject
>>>> has to reply to tasks using 'button boxes' which are implemented as
>>>> keyboards. Usually, type and time of the buttonpress are of importance
>>>> (and
>>>> will probably change further procedere). Keyboard responses usually go to
>>>> that window (or system console) which has the current focus or is active
>>>> and
>>>> *this* is something, we do not want.
>>>>
>>>> Sometimes we show visual stimuli on one screen(#1) and operate the system
>>>> from another screen(#2). Sometimes we even have no visual stimuli at all,
>>>> but like to read subject responses and control the stimuli from within a
>>>> control window. In all cases it would be helpful if the response-boxes
>>>> would
>>>> not automatically send their output to the active window resp.
>>>> application.
>>>>
>>>> Helpful would be, if the output of the response-box-keyboards
>>>> * could be restricted to a specific process
>>>> * is not sent automatically, but only to a program which 'opened' the
>>>> device
>>>> * is not sent automatically, but has to be read from a device.
>>>> (Could this be done preserving the exact timepoint of each buttonpress?)
>>>>
>>>
>>> First of all, nothing is "sent automatically". Processes have to read
>>> the events from the kernel, so point #3 doesn't make much sense to me.
>>>
>>
>> Think of me as quite unaware in these matters. I'm seeing this 'signal'
>> (keyboard events) distributed by default to every application which gets
>> active/the focus.
>>
>> But regarding your issue: You should simply configure you xserver to
>>> not use the devices in question. Add an X11 config to
>>> /etc/X11/xorg.conf.d/50-ignore-custom-devices.conf which contains
>>> something like:
>>>
>>> Section "InputClass"
>>> Identifier "Custom Input Blacklist"
>>> MatchProduct "<Product-Name-of-Your-Device>"
>>> MatchDevicePath "/dev/input/event*"
>>> Option "Ignore" "on"
>>> EndSection
>>>
>>> You can read the product-name of your device via: `cat
>>> /sys/class/input/input<num>/name`
>>> where "input<num>" is your device in question.
>>>
>>> This will cause the Xserver to stop using your input devices and no
>>> window will get any events from them. Now you can program your custom
>>> applications to open the correct devices manually and reading events
>>> from them. However, this requires modifications to these applications.
>>> But if you just want your xserver to route specific events to specific
>>> processes, your applications must be XInput2-aware/capable.
>>>
>>> Instructing the kernel to route specific events to specific processes
>>> is the wrong approach here (except regarding the linux-console, which
>>> is special but *really* shouldn't be used for such stuff). The kernel
>>> does not care for policy but only provides hardware-abstraction. It's
>>> up to your applications to use the correct X11 APIs to only read
>>> events from specific XInput2-devices. So the correct people to ask
>>> about this are actually the developers of your applications and the
>>> X11 people. The kernel, by default, restricts input-device access to
>>> root, so basically *no* user gets input access. The X-Server now
>>> applies some default policies on these devices to route events to X11
>>> applications. By default, hot-plugging is enabled in new X-Servers and
>>> all devices are markes as Master devices. This means, their events are
>>> broad-casted to all X11 windows. If you don't want that, you can mark
>>> devices as "Floating", which means, the device will not broadcast
>>> events, but use the XInput API to report input events. Only
>>> applications which use XInput can now request events from the device.
>>>
>>> You can mark devices as floating via:
>>> Section "InputClass"
>>> Identifier "Custom Input Blacklist"
>>> MatchProduct "<Product-Name-of-Your-Device>"
>>> MatchDevicePath "/dev/input/event*"
>>> Option "Floating" "on"
>>> EndSection
>>>
>>> Also see "man xorg.conf" and search for "Floating".
>>>
>>
>> Thanks for this explanation. It helped a lot and I now see, which 'path'
>> to go on...
>>
>>>
>>> I hope that helps! I it's still unclear, let me know.
>>> As a side-note, please always put the mailing-lists on CC. I'm not
>>> doing that myself now, as I don't know whether you excluded them on
>>> purpose. But if you start a discussion on the mailing-list, you should
>>> keep it there so other people can comment, too. Most mail-clients
>>> provide the "reply to all" feature to do that automatically.
>>>
>> My mailer didn't do it correctly. But short time after the mail to You,
>> the same mail was sent to the list manually...
>>
>>>
>>> Thanks
>>> David
>>>
>>
>> Thanks again & Regards,
>> Roger
>>
>> .
>>>
>>>
>> --
>>
>> Besuchen Sie uns auf: www.uke.de
>> _____________________________________________________________________
>>
>> Universitätsklinikum Hamburg-Eppendorf; Körperschaft des öffentlichen
>> Rechts; Gerichtsstand: Hamburg
>> Vorstandsmitglieder: Prof. Dr. Christian Gerloff (Vertreter des
>> Vorsitzenden), Prof. Dr. Dr. Uwe Koch-Gromus, Joachim Prölß, Rainer Schoppik
>> _____________________________________________________________________
>>
>> SAVE PAPER - THINK BEFORE PRINTING
>>
>
--
Besuchen Sie uns auf: www.uke.de
_____________________________________________________________________
Universitätsklinikum Hamburg-Eppendorf; Körperschaft des öffentlichen Rechts; Gerichtsstand: Hamburg
Vorstandsmitglieder: Prof. Dr. Christian Gerloff (Vertreter des Vorsitzenden), Prof. Dr. Dr. Uwe Koch-Gromus, Joachim Prölß, Rainer Schoppik
_____________________________________________________________________
SAVE PAPER - THINK BEFORE PRINTING
[-- Attachment #2: R_Zimmermann.vcf --]
[-- Type: text/x-vcard, Size: 427 bytes --]
begin:vcard
fn:Dr. Roger Zimmermann
n:Zimmermann;Dr. Roger
org;quoted-printable;quoted-printable:Zentrum f=C3=BCr exp. Medizin;Institut f=C3=BCr Neuro- und Pathophysiologie
adr;quoted-printable:;;Martinistra=C3=9Fe 52;Hamburg;;20246;Germany
email;internet:R.Zimmermann@UKE.Uni-Hamburg.de
tel;work:..49 (0)40 42803 5351
tel;fax:..49 (0)40 42803 7255
x-mozilla-html:FALSE
url:http://www.uke.uni-hamburg.de
version:2.1
end:vcard
^ permalink raw reply
* Re: Sony Vaio Duo 11: getting middle mouse button to work
From: Stephan Mueller @ 2014-01-30 3:48 UTC (permalink / raw)
To: Benjamin Tissoires
Cc: Mattia Dongili, platform-driver-x86, Jiri Kosina, linux-input
In-Reply-To: <CAN+gG=EOqfyOid8bDYH5GYCsOOqYysuUdusg5XOh6LtUMShd_g@mail.gmail.com>
Am Mittwoch, 29. Januar 2014, 10:07:40 schrieb Benjamin Tissoires:
Hi Benjamin,
> On Wed, Jan 29, 2014 at 9:59 AM, Stephan Mueller <smueller@chronox.de>
wrote:
> > Am Mittwoch, 29. Januar 2014, 09:53:03 schrieb Benjamin Tissoires:
> >
> > Hi Benjamin,
> >
> >>On Fri, Jan 24, 2014 at 11:51 PM, Stephan Mueller <smueller@chronox.de>
> >>
> > wrote:
> >>> Am Samstag, 25. Januar 2014, 12:17:13 schrieb Mattia Dongili:
> >>>
> >>> Hi Mattia,
> >>>
> >>>> I'd try with the input subsystem and the synaptics_usb driver first
> >>>> but it's just a wild guess. Your kernel log should give you more
> >>>> hints about which driver is bound to the device and the sysfs tree
> >>>> under
> >>>> /sys/class/input/event*/device/* has all the capabilities and
> >>>> identifiers.
> >>>
> >>> The following did not help:
> >>>
> >>> modprobe synaptics_usb
> >>> cd /sys/bus/usb/drivers/usbhid
> >>> echo -n "1-1.3:1.0" > unbind
> >>> #now the mouse is without driver, does not move, and
> >>> #/sys/class/input/event2/device/device is without driver
> >>> cd /sys/bus/usb/drivers/synaptics_usb
> >>> echo -n "1-1.3:1.0" > bind
> >>> #error: no such device, mouse does not work, nothing in dmesg
> >>> cd /sys/bus/usb/drivers/usbhid
> >>> echo -n "1-1.3:1.0" > bind
> >>> #mouse works again without middle button
> >>
> >>Hi Stephan,
> >>
> >>in this case, you definitively want to talk to HID (and input) folks.
> >>Adding Jiri, the HID maintainer in the discussion.
> >>
> >>Your mouse does not seem to be handled properly by the hid subsystem
> >>and needs quirks, or fix.
> >>
> >>Can you send us some hid-recorder[1] traces of your device? We should
> >>then be able to check what's wrong and hopefully fix the problem.
> >>
> > Thanks a lot for the helping hand. I will try your suggestion tonight
> > and report back.
> >
> > But please allow me to point out that I have doubts that HID or input is
> > at fault, because when sniffing on the USB bus with usbmon, I do *not*
> > see any information transported when pressing the middle button.
> > Therefore, I would suspect it is rather the base USB driver that somehow
> > needs a quirk to access the mouse properly.
>
> Oh, then in this case it may be that your device needs to be put in a
> special mode, and the report descriptors will show us some hints on
> how to do it (maybe).
> I strongly doubt that USB is in fault here. I can not see any reasons
> why the USB or underlying driver would select which packets are
> transmitted.
>
> What you can also do is setup a windows virtual machine, assign the
> usb device to it, and sniff through usbmon or wireshark what packets
> are emitted from/to the mouse. Then, we will duplicate this behavior
> in the hid driver, and you would be good to go. Still, having the
> reports descriptors (which are provided by hid-recorder, or in
> /sys/kernel/debug/hid/DEVICE/rdesc, or in lsusb -vv when the usbhid
> driver is not bound) would help us to understand the mouse firmware.
>
> Cheers,
> Benjamin
The device is 26E1:C1A0; when doing a cat
/sys/kernel/debug/hid/0003\:26E1\:C1A0.0003/events, I see the mouse movements
and the left and right mouse button, but not the middle one.
# cat /sys/kernel/debug/hid/0003\:26E1\:C1A0.0003/rdesc
05 01 09 02 a1 01 85 01 09 01 a1 00 05 09 19 01 29 03 15 00 25 01 75 01 95 03
81 02 95 05 81 01 05 01 15 81 25 7f 75 08 95 03 09 30 09 31 09 38 81 06 c0 c0
06 a0 ff 09 01 a1 01 85 02 09 02 a1 00 06 a1 ff 09 01 15 80 25 7f 35 00 45 ff
75 08 95 04 81 02 09 11 15 80 25 7f 35 00 45 ff 75 08 95 04 91 02 c0 c0
INPUT(1)[INPUT]
Field(0)
Physical(GenericDesktop.Pointer)
Application(GenericDesktop.Mouse)
Usage(3)
Button.0001
Button.0002
Button.0003
Logical Minimum(0)
Logical Maximum(1)
Report Size(1)
Report Count(3)
Report Offset(0)
Flags( Variable Absolute )
Field(1)
Physical(GenericDesktop.Pointer)
Application(GenericDesktop.Mouse)
Usage(3)
GenericDesktop.X
GenericDesktop.Y
GenericDesktop.Wheel
Logical Minimum(-127)
Logical Maximum(127)
Report Size(8)
Report Count(3)
Report Offset(8)
Flags( Variable Relative )
INPUT(2)[INPUT]
Field(0)
Physical(ffa0.0002)
Application(ffa0.0001)
Usage(4)
ffa1.0001
ffa1.0001
ffa1.0001
ffa1.0001
Logical Minimum(-128)
Logical Maximum(127)
Physical Minimum(0)
Physical Maximum(255)
Report Size(8)
Report Count(4)
Report Offset(0)
Flags( Variable Absolute )
OUTPUT(2)[OUTPUT]
Field(0)
Physical(ffa0.0002)
Application(ffa0.0001)
Usage(4)
ffa1.0011
ffa1.0011
ffa1.0011
ffa1.0011
Logical Minimum(-128)
Logical Maximum(127)
Physical Minimum(0)
Physical Maximum(255)
Report Size(8)
Report Count(4)
Report Offset(0)
Flags( Variable Absolute )
Button.0001 ---> Key.LeftBtn
Button.0002 ---> Key.RightBtn
Button.0003 ---> Key.MiddleBtn
GenericDesktop.X ---> Relative.X
GenericDesktop.Y ---> Relative.Y
GenericDesktop.Wheel ---> Relative.Wheel
ffa1.0001 ---> Absolute.Misc
ffa1.0001 ---> Absolute.?
ffa1.0001 ---> Absolute.?
ffa1.0001 ---> Absolute.?
ffa1.0011 ---> Sync.Report
ffa1.0011 ---> Sync.Report
ffa1.0011 ---> Sync.Report
ffa1.0011 ---> Sync.Report
Here is the hid-recorder output -- the mouse clicks are at the bottom. The
middle button did not generate anything:
hid-recorder /dev/hidraw0
R: 102 05 01 09 02 a1 01 85 01 09 01 a1 00 05 09 19 01 29 03 15 00 25 01 75 01
95 03 81 02 95 05 81 01 05 01 15 81 25 7f 75 08 95 03 09 30 09 31 09 38 81 06
c0 c0 06 a0 ff 09 01 a1 01 85 02 09 02 a1 00 06 a1 ff 09 01 15 80 25 7f 35 00
45 ff 75 08 95 04 81 02 09 11 15 80 25 7f 35 00 45 ff 75 08 95 04 91 02 c0 c0
N: Crucialtek co.,LTD Optical Track Pad
P: usb-0000:00:1a.0-1.3/input0
I: 3 26e1 c1a0
E: 0.000000 5 01 00 00 01 00
E: 0.007998 5 01 00 00 01 00
E: 0.031999 5 01 00 01 00 00
E: 0.160003 5 01 00 01 fe 00
E: 0.167999 5 01 00 01 ff 00
E: 0.175997 5 01 00 01 fe 00
E: 0.191999 5 01 00 01 fe 00
E: 0.199948 5 01 00 01 fd 00
E: 0.215935 5 01 00 01 fe 00
E: 0.223858 5 01 00 01 fe 00
E: 0.231940 5 01 00 00 ff 00
E: 0.247945 5 01 00 00 ff 00
E: 0.295953 5 01 00 00 ff 00
E: 0.319953 5 01 00 01 fe 00
E: 0.335936 5 01 00 02 fe 00
E: 0.343944 5 01 00 01 fe 00
E: 0.359938 5 01 00 01 ff 00
E: 0.383963 5 01 00 ff 00 00
E: 2.407955 5 01 02 00 00 00
E: 2.623954 5 01 00 00 00 00
E: 5.024015 5 01 01 00 00 00
E: 5.320041 5 01 00 00 00 00
Ciao
Stephan
--
| Cui bono? |
^ permalink raw reply
* Re: PROBLEM: [Lenovo Thinkpad t440s] Touchpad periodically stops working
From: Jan Bessai @ 2014-01-29 23:21 UTC (permalink / raw)
To: linux-input
In-Reply-To: <CAO4C+K5Z3U5Ft12aEPwhFOAxcF_UWP+3Hw9WA8xcjw=k22ZvRQ@mail.gmail.com>
Hi Jon,
it is a hardware defect. Please see
> http://www.spinics.net/lists/linux-input/msg28623.html
for a discussion.
Greetings,
Jan
^ permalink raw reply
* PROBLEM: [Lenovo Thinkpad t440s] Touchpad periodically stops working
From: Jon Vaughan @ 2014-01-29 22:52 UTC (permalink / raw)
To: linux-input
[Lenovo Thinkpad t440s] Touchpad periodically stops working
Every 15 minutes or so, the cursor stops reacting to input from the
touchpad or trackpoint. In Windows on the same machine there is no
problem. In syslog you see:
Jan 12 19:08:43 mv8 kernel: [ 8460.304134] psmouse serio1: TouchPad at
isa0060/serio1/input0 lost sync at byte 1
Jan 12 19:08:43 mv8 kernel: [ 8460.305321] psmouse serio1: TouchPad at
isa0060/serio1/input0 lost sync at byte 1
Jan 12 19:08:43 mv8 kernel: [ 8460.306606] psmouse serio1: TouchPad at
isa0060/serio1/input0 lost sync at byte 1
Jan 12 19:08:43 mv8 kernel: [ 8460.307792] psmouse serio1: TouchPad at
isa0060/serio1/input0 lost sync at byte 1
Jan 12 19:08:43 mv8 kernel: [ 8460.309002] psmouse serio1: TouchPad at
isa0060/serio1/input0 lost sync at byte 1
Occassionally the touchpad will resync, but at other times the cursor
will remain unresponsive and can only be brought back to life with a
sudo rmmod psmouse, sudo modprobe psmouse
The Ubuntu Lauchpad report (where I was requested to make this
submission) is here:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1268365
[4.] Kernel version
jon@mv8:~$ cat /proc/version
Linux version 3.13.1-031301-generic (apw@gomeisa) (gcc version 4.6.3
(Ubuntu/Linaro 4.6.3-1ubuntu5) ) #201401291035 SMP Wed Jan 29 15:37:43
UTC 2014
[7.] Environment
jon@mv8:~$ lsb_release -rd
Description: Ubuntu 13.10
Release: 13.10
[7.1.] Software
sh ver_linux
If some fields are empty or look unusual you may have an old version.
Compare to the current minimal requirements in Documentation/Changes.
Linux mv8 3.13.1-031301-generic #201401291035 SMP Wed Jan 29 15:37:43
UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Gnu C 4.8
Gnu make 3.81
binutils 2.23.52.20130913
util-linux 2.20.1
mount support
module-init-tools 9
e2fsprogs 1.42.8
pcmciautils 018
PPP 2.4.5
Linux C Library 2.17
Dynamic linker (ldd) 2.17
Procps 3.3.3
Net-tools 1.60
Kbd 1.15.5
Sh-utils 8.20
wireless-tools 30
Modules Loaded ctr ccm pci_stub vboxpci vboxnetadp vboxnetflt
vboxdrv parport_pc ppdev rfcomm bnep snd_hda_codec_hdmi binfmt_misc
intel_rapl x86_pkg_temp_thermal intel_powerclamp coretemp arc4
kvm_intel kvm crct10dif_pclmul crc32_pclmul uvcvideo
ghash_clmulni_intel iwlmvm aesni_intel aes_x86_64 lrw gf128mul
mac80211 videobuf2_vmalloc glue_helper ablk_helper videobuf2_memops
cryptd joydev videobuf2_core videodev cdc_mbim cdc_ncm usbnet mii
cdc_wdm cdc_acm microcode btusb snd_seq_midi bluetooth
snd_seq_midi_event snd_rawmidi thinkpad_acpi nls_iso8859_1 nvram
iwlwifi snd_hda_codec_realtek i915 snd_hda_intel drm_kms_helper
snd_hda_codec psmouse snd_hwdep snd_pcm drm serio_raw rtsx_pci_ms
snd_seq cfg80211 snd_seq_device memstick mei_me i2c_algo_bit
snd_page_alloc mei lpc_ich snd_timer video snd wmi soundcore mac_hid
intel_smartconnect lp parport hid_generic usbhid hid rtsx_pci_sdmmc
ahci e1000e libahci rtsx_pci ptp pps_core
[7.2.] Processor information (from /proc/cpuinfo):
cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 69
model name : Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz
stepping : 1
microcode : 0x17
cpu MHz : 2099.988
cache size : 4096 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx
pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl
xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor
ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2
x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand
lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi
flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms
invpcid rtm
bogomips : 5387.76
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 69
model name : Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz
stepping : 1
microcode : 0x17
cpu MHz : 2103.785
cache size : 4096 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx
pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl
xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor
ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2
x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand
lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi
flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms
invpcid rtm
bogomips : 5387.76
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
processor : 2
vendor_id : GenuineIntel
cpu family : 6
model : 69
model name : Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz
stepping : 1
microcode : 0x17
cpu MHz : 2099.988
cache size : 4096 KB
physical id : 0
siblings : 4
core id : 1
cpu cores : 2
apicid : 2
initial apicid : 2
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx
pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl
xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor
ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2
x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand
lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi
flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms
invpcid rtm
bogomips : 5387.76
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 69
model name : Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz
stepping : 1
microcode : 0x17
cpu MHz : 2344.148
cache size : 4096 KB
physical id : 0
siblings : 4
core id : 1
cpu cores : 2
apicid : 3
initial apicid : 3
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx
pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl
xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor
ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2
x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand
lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi
flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms
invpcid rtm
bogomips : 5387.76
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
[7.3.] Module information (from /proc/modules):
cat /proc/modules
ctr 13193 1 - Live 0x0000000000000000
ccm 17856 1 - Live 0x0000000000000000
pci_stub 12622 1 - Live 0x0000000000000000
vboxpci 23194 0 - Live 0x0000000000000000 (OF)
vboxnetadp 25670 0 - Live 0x0000000000000000 (OF)
vboxnetflt 27613 0 - Live 0x0000000000000000 (OF)
vboxdrv 335365 3 vboxpci,vboxnetadp,vboxnetflt, Live 0x0000000000000000 (OF)
parport_pc 36962 0 - Live 0x0000000000000000
ppdev 17711 0 - Live 0x0000000000000000
rfcomm 74748 12 - Live 0x0000000000000000
bnep 19884 2 - Live 0x0000000000000000
snd_hda_codec_hdmi 46898 1 - Live 0x0000000000000000
binfmt_misc 17508 1 - Live 0x0000000000000000
intel_rapl 19228 0 - Live 0x0000000000000000
x86_pkg_temp_thermal 14269 0 - Live 0x0000000000000000
intel_powerclamp 19031 0 - Live 0x0000000000000000
coretemp 17728 0 - Live 0x0000000000000000
arc4 12573 2 - Live 0x0000000000000000
kvm_intel 144426 0 - Live 0x0000000000000000
kvm 468147 1 kvm_intel, Live 0x0000000000000000
crct10dif_pclmul 14250 0 - Live 0x0000000000000000
crc32_pclmul 13160 0 - Live 0x0000000000000000
uvcvideo 82247 0 - Live 0x0000000000000000
ghash_clmulni_intel 13259 0 - Live 0x0000000000000000
iwlmvm 195779 0 - Live 0x0000000000000000
aesni_intel 55720 2 - Live 0x0000000000000000
aes_x86_64 17131 1 aesni_intel, Live 0x0000000000000000
lrw 13323 1 aesni_intel, Live 0x0000000000000000
gf128mul 14951 1 lrw, Live 0x0000000000000000
mac80211 654124 1 iwlmvm, Live 0x0000000000000000
videobuf2_vmalloc 13216 1 uvcvideo, Live 0x0000000000000000
glue_helper 14095 1 aesni_intel, Live 0x0000000000000000
ablk_helper 13597 1 aesni_intel, Live 0x0000000000000000
videobuf2_memops 13362 1 videobuf2_vmalloc, Live 0x0000000000000000
cryptd 20530 3 ghash_clmulni_intel,aesni_intel,ablk_helper, Live
0x0000000000000000
joydev 17575 0 - Live 0x0000000000000000
videobuf2_core 40972 1 uvcvideo, Live 0x0000000000000000
videodev 139761 2 uvcvideo,videobuf2_core, Live 0x0000000000000000
cdc_mbim 13271 0 - Live 0x0000000000000000
cdc_ncm 24632 1 cdc_mbim, Live 0x0000000000000000
usbnet 44005 2 cdc_mbim,cdc_ncm, Live 0x0000000000000000
mii 13981 1 usbnet, Live 0x0000000000000000
cdc_wdm 23105 1 cdc_mbim, Live 0x0000000000000000
cdc_acm 28856 0 - Live 0x0000000000000000
microcode 23788 0 - Live 0x0000000000000000
btusb 28326 0 - Live 0x0000000000000000
snd_seq_midi 13324 0 - Live 0x0000000000000000
bluetooth 411140 22 rfcomm,bnep,btusb, Live 0x0000000000000000
snd_seq_midi_event 14899 1 snd_seq_midi, Live 0x0000000000000000
snd_rawmidi 30465 1 snd_seq_midi, Live 0x0000000000000000
thinkpad_acpi 81925 1 - Live 0x0000000000000000
nls_iso8859_1 12713 1 - Live 0x0000000000000000
nvram 14462 1 thinkpad_acpi, Live 0x0000000000000000
iwlwifi 179720 1 iwlmvm, Live 0x0000000000000000
snd_hda_codec_realtek 61978 1 - Live 0x0000000000000000
i915 816869 5 - Live 0x0000000000000000
snd_hda_intel 57222 5 - Live 0x0000000000000000
drm_kms_helper 53224 1 i915, Live 0x0000000000000000
snd_hda_codec 199156 3
snd_hda_codec_hdmi,snd_hda_codec_realtek,snd_hda_intel, Live
0x0000000000000000
psmouse 108513 0 - Live 0x0000000000000000
snd_hwdep 13613 1 snd_hda_codec, Live 0x0000000000000000
snd_pcm 107140 3 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec, Live
0x0000000000000000
drm 308397 4 i915,drm_kms_helper, Live 0x0000000000000000
serio_raw 13462 0 - Live 0x0000000000000000
rtsx_pci_ms 18320 0 - Live 0x0000000000000000
snd_seq 66061 2 snd_seq_midi,snd_seq_midi_event, Live 0x0000000000000000
cfg80211 509407 3 iwlmvm,mac80211,iwlwifi, Live 0x0000000000000000
snd_seq_device 14497 3 snd_seq_midi,snd_rawmidi,snd_seq, Live 0x0000000000000000
memstick 16968 1 rtsx_pci_ms, Live 0x0000000000000000
mei_me 18578 0 - Live 0x0000000000000000
i2c_algo_bit 13564 1 i915, Live 0x0000000000000000
snd_page_alloc 18798 2 snd_hda_intel,snd_pcm, Live 0x0000000000000000
mei 82671 1 mei_me, Live 0x0000000000000000
lpc_ich 21163 0 - Live 0x0000000000000000
snd_timer 30038 2 snd_pcm,snd_seq, Live 0x0000000000000000
video 19859 1 i915, Live 0x0000000000000000
snd 73850 22 snd_hda_codec_hdmi,snd_seq_midi,snd_rawmidi,thinkpad_acpi,snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm,snd_seq,snd_seq_device,snd_timer,
Live 0x0000000000000000
wmi 19363 0 - Live 0x0000000000000000
soundcore 12680 1 snd, Live 0x0000000000000000
mac_hid 13253 0 - Live 0x0000000000000000
intel_smartconnect 12619 0 - Live 0x0000000000000000
lp 17799 0 - Live 0x0000000000000000
parport 42481 3 parport_pc,ppdev,lp, Live 0x0000000000000000
hid_generic 12548 0 - Live 0x0000000000000000
usbhid 53067 0 - Live 0x0000000000000000
hid 106254 2 hid_generic,usbhid, Live 0x0000000000000000
rtsx_pci_sdmmc 23667 0 - Live 0x0000000000000000
ahci 30063 3 - Live 0x0000000000000000
e1000e 257783 0 - Live 0x0000000000000000
libahci 32277 1 ahci, Live 0x0000000000000000
rtsx_pci 46133 2 rtsx_pci_ms,rtsx_pci_sdmmc, Live 0x0000000000000000
ptp 18980 1 e1000e, Live 0x0000000000000000
pps_core 19381 1 ptp, Live 0x0000000000000000
[7.4.] Loaded driver and hardware information (/proc/ioports, /proc/iomem)
cat /proc/ioports
0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0062-0062 : EC data
0064-0064 : keyboard
0066-0066 : EC cmd
0070-0071 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0800-087f : pnp 00:01
0880-08ff : pnp 00:01
0900-097f : pnp 00:01
0980-09ff : pnp 00:01
0a00-0a7f : pnp 00:01
0a80-0aff : pnp 00:01
0b00-0b7f : pnp 00:01
0b80-0bff : pnp 00:01
0cf8-0cff : PCI conf1
0d00-ffff : PCI Bus 0000:00
15e0-15ef : pnp 00:01
1600-167f : pnp 00:01
1640-165f : pnp 00:01
1800-1803 : ACPI PM1a_EVT_BLK
1804-1805 : ACPI PM1a_CNT_BLK
1808-180b : ACPI PM_TMR
1810-1815 : ACPI CPU throttle
1830-1833 : iTCO_wdt
1850-1850 : ACPI PM2_CNT_BLK
1860-187f : iTCO_wdt
1880-189f : ACPI GPE0_BLK
3000-303f : 0000:00:02.0
3060-307f : 0000:00:1f.2
3060-307f : ahci
3080-309f : 0000:00:19.0
30a0-30a7 : 0000:00:1f.2
30a0-30a7 : ahci
30a8-30af : 0000:00:1f.2
30a8-30af : ahci
30b0-30b7 : 0000:00:16.3
30b0-30b7 : serial
30b8-30bb : 0000:00:1f.2
30b8-30bb : ahci
30bc-30bf : 0000:00:1f.2
30bc-30bf : ahci
efa0-efbf : 0000:00:1f.3
cat /proc/iomem
00000000-00000fff : reserved
00001000-00057fff : System RAM
00058000-00058fff : reserved
00059000-0009bfff : System RAM
0009c000-0009cfff : reserved
0009d000-0009dfff : System RAM
0009e000-000bffff : reserved
000a0000-000bffff : PCI Bus 0000:00
000c0000-000c3fff : PCI Bus 0000:00
000c4000-000c7fff : PCI Bus 0000:00
000c8000-000cbfff : PCI Bus 0000:00
000cc000-000cffff : PCI Bus 0000:00
000d0000-000d3fff : PCI Bus 0000:00
000d4000-000d7fff : PCI Bus 0000:00
000d8000-000dbfff : PCI Bus 0000:00
000dc000-000dffff : PCI Bus 0000:00
000e0000-000e3fff : PCI Bus 0000:00
000e4000-000e7fff : PCI Bus 0000:00
000e8000-000ebfff : PCI Bus 0000:00
000ec000-000effff : PCI Bus 0000:00
000f0000-000fffff : System ROM
00100000-d0261fff : System RAM
02000000-0274d25d : Kernel code
0274d25e-02d1a3bf : Kernel data
02e74000-02fdafff : Kernel bss
d0262000-d0463fff : reserved
d0464000-da91cfff : System RAM
da91d000-dcd3efff : reserved
dcd3f000-dce7efff : ACPI Non-volatile Storage
dce7f000-dcefefff : ACPI Tables
dceff000-dcefffff : System RAM
dcf00000-df9fffff : reserved
dda00000-df9fffff : Graphics Stolen Memory
dfa00000-febfffff : PCI Bus 0000:00
e0000000-efffffff : 0000:00:02.0
e0000000-e07e8fff : BOOTFB
f0000000-f03fffff : 0000:00:02.0
f0400000-f04fffff : PCI Bus 0000:03
f0400000-f0401fff : 0000:03:00.0
f0400000-f0401fff : iwlwifi
f0500000-f05fffff : PCI Bus 0000:02
f0500000-f0500fff : 0000:02:00.0
f0500000-f0500fff : rtsx_pci
f0600000-f061ffff : 0000:00:19.0
f0600000-f061ffff : e1000e
f0620000-f062ffff : 0000:00:14.0
f0620000-f062ffff : xhci_hcd
f0630000-f0633fff : 0000:00:03.0
f0630000-f0633fff : ICH HD audio
f0634000-f0637fff : 0000:00:1b.0
f0634000-f0637fff : ICH HD audio
f0638000-f06380ff : 0000:00:1f.3
f0639000-f063901f : 0000:00:16.0
f0639000-f063901f : mei_me
f063c000-f063c7ff : 0000:00:1f.2
f063c000-f063c7ff : ahci
f063d000-f063d3ff : 0000:00:1d.0
f063d000-f063d3ff : ehci_hcd
f063e000-f063efff : 0000:00:19.0
f063e000-f063efff : e1000e
f063f000-f063ffff : 0000:00:16.3
f8000000-fbffffff : PCI MMCONFIG 0000 [bus 00-3f]
f80f8000-f80f8fff : reserved
fe101000-fe112fff : reserved
fec00000-fec003ff : IOAPIC 0
fed00000-fed003ff : HPET 0
fed10000-fed13fff : pnp 00:01
fed18000-fed18fff : pnp 00:01
fed19000-fed19fff : pnp 00:01
fed1c000-fed1ffff : reserved
fed1c000-fed1ffff : pnp 00:01
fed1f410-fed1f414 : iTCO_wdt
fed40000-fed4bfff : PCI Bus 0000:00
fed45000-fed4bfff : pnp 00:01
fed90000-fed90fff : dmar0
fed91000-fed91fff : dmar1
fee00000-fee00fff : Local APIC
100000000-31e5fffff : System RAM
31e600000-31fffffff : RAM buffer
[7.5.] PCI information ('lspci -vvv' as root)
sudo lspci -vvv
[sudo] password for jon:
00:00.0 Host bridge: Intel Corporation Haswell-ULT DRAM Controller (rev 0b)
Subsystem: Lenovo Device 220c
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort+ >SERR- <PERR- INTx-
Latency: 0
Capabilities: [e0] Vendor Specific Information: Len=0c <?>
00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT
Integrated Graphics Controller (rev 0b) (prog-if 00 [VGA controller])
Subsystem: Lenovo Device 220c
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 65
Region 0: Memory at f0000000 (64-bit, non-prefetchable) [size=4M]
Region 2: Memory at e0000000 (64-bit, prefetchable) [size=256M]
Region 4: I/O ports at 3000 [size=64]
Expansion ROM at <unassigned> [disabled]
Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit-
Address: fee00018 Data: 0000
Capabilities: [d0] Power Management version 2
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [a4] PCI Advanced Features
AFCap: TP+ FLR+
AFCtrl: FLR-
AFStatus: TP-
Kernel driver in use: i915
00:03.0 Audio device: Intel Corporation Device 0a0c (rev 0b)
Subsystem: Lenovo Device 220c
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 66
Region 0: Memory at f0630000 (64-bit, non-prefetchable) [size=16K]
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D3 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit-
Address: fee00438 Data: 0000
Capabilities: [70] Express (v1) Root Complex Integrated Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited
ExtTag- RBE- FLReset+
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
LnkCap: Port #0, Speed unknown, Width x0, ASPM unknown, Latency L0
<64ns, L1 <1us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed unknown, Width x0, TrErr- Train- SlotClk- DLActive-
BWMgmt- ABWMgmt-
Kernel driver in use: snd_hda_intel
00:14.0 USB controller: Intel Corporation Lynx Point-LP USB xHCI HC
(rev 04) (prog-if 30 [XHCI])
Subsystem: Lenovo Device 220c
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 58
Region 0: Memory at f0620000 (64-bit, non-prefetchable) [size=64K]
Capabilities: [70] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA PME(D0-,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [80] MSI: Enable+ Count=1/8 Maskable- 64bit+
Address: 00000000fee002f8 Data: 0000
Kernel driver in use: xhci_hcd
00:16.0 Communication controller: Intel Corporation Lynx Point-LP HECI
#0 (rev 04)
Subsystem: Lenovo Device 220c
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 62
Region 0: Memory at f0639000 (64-bit, non-prefetchable) [size=32]
Capabilities: [50] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [8c] MSI: Enable+ Count=1/1 Maskable- 64bit+
Address: 00000000fee003b8 Data: 0000
Kernel driver in use: mei_me
00:16.3 Serial controller: Intel Corporation Lynx Point-LP HECI KT
(rev 04) (prog-if 02 [16550])
Subsystem: Lenovo Device 220c
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin D routed to IRQ 17
Region 0: I/O ports at 30b0 [size=8]
Region 1: Memory at f063f000 (32-bit, non-prefetchable) [size=4K]
Capabilities: [c8] Power Management version 3
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [d0] MSI: Enable- Count=1/1 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Kernel driver in use: serial
00:19.0 Ethernet controller: Intel Corporation Ethernet Connection
I218-LM (rev 04)
Subsystem: Lenovo Device 2214
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 20
Region 0: Memory at f0600000 (32-bit, non-prefetchable) [disabled] [size=128K]
Region 1: Memory at f063e000 (32-bit, non-prefetchable) [disabled] [size=4K]
Region 2: I/O ports at 3080 [disabled] [size=32]
Capabilities: [c8] Power Management version 2
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D3 NoSoftRst- PME-Enable+ DSel=0 DScale=1 PME-
Capabilities: [d0] MSI: Enable- Count=1/1 Maskable- 64bit+
Address: 00000000fee00358 Data: 0000
Capabilities: [e0] PCI Advanced Features
AFCap: TP+ FLR+
AFCtrl: FLR-
AFStatus: TP-
Kernel driver in use: e1000e
00:1b.0 Audio device: Intel Corporation Lynx Point-LP HD Audio
Controller (rev 04)
Subsystem: Lenovo Device 220c
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 63
Region 0: Memory at f0634000 (64-bit, non-prefetchable) [size=16K]
Capabilities: [50] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=55mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D3 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit+
Address: 00000000fee003f8 Data: 0000
Capabilities: [70] Express (v1) Root Complex Integrated Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
ExtTag- RBE- FLReset+
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend-
LnkCap: Port #0, Speed unknown, Width x0, ASPM unknown, Latency L0
<64ns, L1 <1us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed unknown, Width x0, TrErr- Train- SlotClk- DLActive-
BWMgmt- ABWMgmt-
Capabilities: [100 v1] Virtual Channel
Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
Arb: Fixed- WRR32- WRR64- WRR128-
Ctrl: ArbSelect=Fixed
Status: InProgress-
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=01
Status: NegoPending- InProgress-
VC1: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable- ID=2 ArbSelect=Fixed TC/VC=04
Status: NegoPending- InProgress-
Kernel driver in use: snd_hda_intel
00:1c.0 PCI bridge: Intel Corporation Lynx Point-LP PCI Express Root
Port 6 (rev e4) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Bus: primary=00, secondary=02, subordinate=02, sec-latency=0
I/O behind bridge: 0000f000-00000fff
Memory behind bridge: f0500000-f05fffff
Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff
Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [40] Express (v2) Root Port (Slot+), MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
ExtTag- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend-
LnkCap: Port #6, Speed 5GT/s, Width x1, ASPM L0s L1, Latency L0 <512ns, L1 <16us
ClockPM- Surprise- LLActRep+ BwNot+
LnkCtl: ASPM L0s L1 Enabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive+
BWMgmt+ ABWMgmt-
SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug- Surprise-
Slot #5, PowerLimit 10.000W; Interlock- NoCompl+
SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt- HPIrq- LinkChg-
Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock-
SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet+ Interlock-
Changed: MRL- PresDet- LinkState+
RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna- CRSVisible-
RootCap: CRSVisible-
RootSta: PME ReqID 0000, PMEStatus- PMEPending-
DevCap2: Completion Timeout: Range ABC, TimeoutDis+ ARIFwd-
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- ARIFwd-
LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-,
Selectable De-emphasis: -6dB
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete-,
EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-, LinkEqualizationRequest-
Capabilities: [80] MSI: Enable- Count=1/1 Maskable- 64bit-
Address: 00000000 Data: 0000
Capabilities: [90] Subsystem: Lenovo Device 220c
Capabilities: [a0] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [100 v0] #00
Capabilities: [200 v1] #1e
Kernel driver in use: pcieport
00:1c.1 PCI bridge: Intel Corporation Lynx Point-LP PCI Express Root
Port 3 (rev e4) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Bus: primary=00, secondary=03, subordinate=03, sec-latency=0
I/O behind bridge: 0000f000-00000fff
Memory behind bridge: f0400000-f04fffff
Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff
Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [40] Express (v2) Root Port (Slot+), MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
ExtTag- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend-
LnkCap: Port #3, Speed 5GT/s, Width x1, ASPM L0s L1, Latency L0 <512ns, L1 <16us
ClockPM- Surprise- LLActRep+ BwNot+
LnkCtl: ASPM L1 Enabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive+
BWMgmt+ ABWMgmt-
SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug- Surprise-
Slot #2, PowerLimit 10.000W; Interlock- NoCompl+
SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt- HPIrq- LinkChg-
Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock-
SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet+ Interlock-
Changed: MRL- PresDet- LinkState+
RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna- CRSVisible-
RootCap: CRSVisible-
RootSta: PME ReqID 0000, PMEStatus- PMEPending-
DevCap2: Completion Timeout: Range ABC, TimeoutDis+ ARIFwd-
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- ARIFwd-
LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-,
Selectable De-emphasis: -6dB
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete-,
EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-, LinkEqualizationRequest-
Capabilities: [80] MSI: Enable- Count=1/1 Maskable- 64bit-
Address: 00000000 Data: 0000
Capabilities: [90] Subsystem: Lenovo Device 220c
Capabilities: [a0] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [100 v0] #00
Capabilities: [200 v1] #1e
Kernel driver in use: pcieport
00:1d.0 USB controller: Intel Corporation Lynx Point-LP USB EHCI #1
(rev 04) (prog-if 20 [EHCI])
Subsystem: Lenovo Device 220c
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 23
Region 0: Memory at f063d000 (32-bit, non-prefetchable) [size=1K]
Capabilities: [50] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [58] Debug port: BAR=1 offset=00a0
Capabilities: [98] PCI Advanced Features
AFCap: TP+ FLR+
AFCtrl: FLR-
AFStatus: TP-
Kernel driver in use: ehci-pci
00:1f.0 ISA bridge: Intel Corporation Lynx Point-LP LPC Controller (rev 04)
Subsystem: Lenovo Device 220c
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Capabilities: [e0] Vendor Specific Information: Len=0c <?>
Kernel driver in use: lpc_ich
00:1f.2 SATA controller: Intel Corporation Lynx Point-LP SATA
Controller 1 [AHCI mode] (rev 04) (prog-if 01 [AHCI 1.0])
Subsystem: Lenovo Device 220c
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin B routed to IRQ 61
Region 0: I/O ports at 30a8 [size=8]
Region 1: I/O ports at 30bc [size=4]
Region 2: I/O ports at 30a0 [size=8]
Region 3: I/O ports at 30b8 [size=4]
Region 4: I/O ports at 3060 [size=32]
Region 5: Memory at f063c000 (32-bit, non-prefetchable) [size=2K]
Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit-
Address: fee00398 Data: 0000
Capabilities: [70] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot+,D3cold-)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [a8] SATA HBA v1.0 BAR4 Offset=00000004
Kernel driver in use: ahci
00:1f.3 SMBus: Intel Corporation Lynx Point-LP SMBus Controller (rev 04)
Subsystem: Lenovo Device 220c
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin C routed to IRQ 255
Region 0: Memory at f0638000 (64-bit, non-prefetchable) [size=256]
Region 4: I/O ports at efa0 [size=32]
02:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd.
Device 5227 (rev 01)
Subsystem: Lenovo Device 220c
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 59
Region 0: Memory at f0500000 (32-bit, non-prefetchable) [size=4K]
Capabilities: [40] Power Management version 3
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=375mA PME(D0-,D1+,D2+,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [50] MSI: Enable+ Count=1/1 Maskable- 64bit+
Address: 00000000fee00318 Data: 0000
Capabilities: [70] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 512 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0
unlimited, L1 <64us
ClockPM+ Surprise- LLActRep- BwNot-
LnkCtl: ASPM L1 Enabled; RCB 64 bytes Disabled- Retrain- CommClk-
ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive-
BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Not Supported, TimeoutDis+
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-,
Selectable De-emphasis: -6dB
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete-,
EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-, LinkEqualizationRequest-
Capabilities: [100 v2] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF-
MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF-
MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+
MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
Capabilities: [140 v1] Device Serial Number 00-00-00-01-00-4c-e0-00
Capabilities: [150 v1] Latency Tolerance Reporting
Max snoop latency: 3145728ns
Max no snoop latency: 3145728ns
Capabilities: [158 v1] #1e
Kernel driver in use: rtsx_pci
03:00.0 Network controller: Intel Corporation Wireless 7260 (rev 83)
Subsystem: Intel Corporation Dual Band Wireless-AC 7260
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 64
Region 0: Memory at f0400000 (64-bit, non-prefetchable) [size=8K]
Capabilities: [c8] Power Management version 3
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
Address: 00000000fee00418 Data: 0000
Capabilities: [40] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <512ns, L1 unlimited
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset+
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd+ ExtTag- PhantFunc- AuxPwr+ NoSnoop+ FLReset-
MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 <4us, L1 <32us
ClockPM+ Surprise- LLActRep- BwNot-
LnkCtl: ASPM L1 Enabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive-
BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range B, TimeoutDis+
DevCtl2: Completion Timeout: 16ms to 55ms, TimeoutDis-
LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-,
Selectable De-emphasis: -6dB
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete-,
EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-, LinkEqualizationRequest-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF-
MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF-
MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+
MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn-
Capabilities: [140 v1] Device Serial Number 5c-51-4f-ff-ff-73-5a-37
Capabilities: [14c v1] Latency Tolerance Reporting
Max snoop latency: 3145728ns
Max no snoop latency: 3145728ns
Capabilities: [154 v1] Vendor Specific Information: ID=cafe Rev=1 Len=014 <?>
Kernel driver in use: iwlwifi[7.7.] Other information that might be
relevant to the problem
[7.6.] SCSI information (from /proc/scsi/scsi)
cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: ATA Model: SAMSUNG MZ7TD512 Rev: DXT0
Type: Direct-Access ANSI SCSI revision: 05
[7.7.] Other information that might be relevant to the problem
ls /proc
1 1080 1159 14 165 1949 1990 2020 2133 2164 2273 23
2397 2606 2668 2786 2907 3145 3311 36 418 45 5 58 652
781 934 98 cpuinfo filesystems key-users meminfo
sched_debug sys vmallocinfo
10 1081 1173 1461 166 1952 1991 2022 2135 22 2275 2327
2398 2612 2673 2787 2921 3155 3376 37 419 459 50 59 673
796 937 acpi crypto fs kmsg misc
schedstat sysrq-trigger vmstat
1009 1098 1187 15 17 1958 2 2028 2136 2207 2276 2333
24 2619 27 28 2934 3162 3382 38 42 46 51 591 7
8 941 asound devices interrupts kpagecount modules
scsi sysvipc zoneinfo
1014 11 12 150 1707 1964 20 2031 2143 2210 2279 2344
2410 2621 2710 2853 2998 317 3383 386 429 47 52 60 718
800 942 buddyinfo diskstats iomem kpageflags mounts
self timer_list
1023 1108 13 151 18 1981 2000 2037 2144 2235 2284 2349
2414 2622 2733 2858 3 3170 34 387 43 473 53 61 733
853 946 bus dma ioports latency_stats mtrr
slabinfo timer_stats
1026 1121 1316 152 1872 1983 2007 2054 2153 2243 2285 2353
2464 2628 2738 2864 3014 32 3431 39 44 478 54 62 75
873 959 cgroups driver irq loadavg net
softirqs tty
1030 1123 1318 153 1874 1985 2015 21 2157 2260 2286 2360
25 2629 2768 2877 304 3243 35 4 440 48 55 63 76
882 96 cmdline execdomains kallsyms locks
pagetypeinfo stat uptime
1037 1147 1358 16 19 1987 2017 2129 2163 2265 2289 2384
26 2656 2770 29 31 33 352 41 448 49 57 647 77
9 97 consoles fb kcore mdstat
partitions swaps version
Also see the original launchpad report here:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1268365
^ permalink raw reply
* Re: [PATCH] input: synaptics-rmi4 - Count IRQs before creating functions; save F01 container.
From: Dmitry Torokhov @ 2014-01-29 22:52 UTC (permalink / raw)
To: Christopher Heiny
Cc: Linux Input, Andrew Duggan, Vincent Huang, Vivian Ly,
Daniel Rosenberg, Jean Delvare, Joerie de Gram, Linus Walleij,
Benjamin Tissoires
In-Reply-To: <BFABBC009FBA1C43B207B15FD485ABD9302AF193@USW-MAIL1.synaptics-inc.local>
On Wed, Jan 29, 2014 at 10:30:48PM +0000, Christopher Heiny wrote:
> Sorry for the delay on this. The mail problems from earlier this week continue to plague me.
>
> On 01/26/2014 10:36 PM, Dmitry Torokhov wrote:
> > Hi Christopher,
> >
> > On Fri, Jan 10, 2014 at 01:53:34PM -0800, Christopher Heiny wrote:
> >>
> >> err_free_data:
> >> + rmi_free_function_list(rmi_dev);
> >> + if (gpio_is_valid(pdata->attn_gpio))
> >> + gpio_free(pdata->attn_gpio);
> >> + devm_kfree(&rmi_dev->dev, data->irq_status);
> >> + devm_kfree(&rmi_dev->dev, data->current_irq_mask);
> >> + devm_kfree(&rmi_dev->dev, data->irq_mask_store);
> >> + devm_kfree(&rmi_dev->dev, data);
> >
> > It is rarely makes sense to explicitly free devm-managed data. In
> > general I find that RMI code is very confused about when devm-managed
> > resources are released (they only released after failed probe or remove,
> > but we use devm_kzalloc to allocate function's interrupt masks during
> > device creation and they will get freed only when parent unbinds, etc).
>
> Yeah, we've gotten a metric ton of confusing advice/recommendations
> regarding devm_* (most of it offline from linux-input) and it shows.
> At one point I was pretty much ready to just bag it all and write our
> own garbage collecting storage manager, but figured that would be
> unlikely to make it upstream :-)
Yeah, some people see mistake screws for nails when they get a hold of a
hammer. Managed resources are nice as long as you have clear
understanding on what happens.
>
> > Given that you mentioned firmware flash in the work and I expect we'll
> > be destroying and re-creating functions and other data structures at
> > will I think we should limit use of devm APIs so that lifetime
> > management is explicit and clear.
>
> Sounds good.
>
> > I tried adjusting the patch so that it works with the version of PDT
> > cleanup patch I posted a few minutes ago, please let me know what you
> > think.
>
> There's some comments below. After making those changes, I've applied this to my test tree, and it works well.
>
> I can send updated versions of your two patches, if you'd like.
Yes, please, I always prefer applying something that was tested. You
can also sent more of the pending stuff my way, no need to limit to 1
patch at a time - I usually able to cherry-pick patches that I do not
have questions about and we can work on ones that I need some
clarification on. Just don't mailbomb me with 100 ;)
> > +static int rmi_check_bootloader_mode(struct rmi_device *rmi_dev,
> > + const struct pdt_entry *pdt)
> > +{
> > + int error;
> > + u8 device_status;
> > +
> > + error = rmi_read(rmi_dev, pdt->data_base_addr + pdt->page_start,
> > + &device_status);
>
> Since this is applied after your previous patch, then this statement should be:
> error = rmi_read(rmi_dev, pdt->data_base_addr, &device_status);
Hmm, I did not think I adjusted data_base_addr in PDT, I only stored the
page start in there... The updated addresses as in function
structures.
Thanks.
--
Dmitry
^ permalink raw reply
* RE: [PATCH] input: synaptics-rmi4 - Count IRQs before creating functions; save F01 container.
From: Christopher Heiny @ 2014-01-29 22:30 UTC (permalink / raw)
To: Dmitry Torokhov
Cc: Linux Input, Andrew Duggan, Vincent Huang, Vivian Ly,
Daniel Rosenberg, Jean Delvare, Joerie de Gram, Linus Walleij,
Benjamin Tissoires
In-Reply-To: <20140127063658.GB32605@core.coreip.homeip.net>
Sorry for the delay on this. The mail problems from earlier this week continue to plague me.
On 01/26/2014 10:36 PM, Dmitry Torokhov wrote:
> Hi Christopher,
>
> On Fri, Jan 10, 2014 at 01:53:34PM -0800, Christopher Heiny wrote:
>>
>> err_free_data:
>> + rmi_free_function_list(rmi_dev);
>> + if (gpio_is_valid(pdata->attn_gpio))
>> + gpio_free(pdata->attn_gpio);
>> + devm_kfree(&rmi_dev->dev, data->irq_status);
>> + devm_kfree(&rmi_dev->dev, data->current_irq_mask);
>> + devm_kfree(&rmi_dev->dev, data->irq_mask_store);
>> + devm_kfree(&rmi_dev->dev, data);
>
> It is rarely makes sense to explicitly free devm-managed data. In
> general I find that RMI code is very confused about when devm-managed
> resources are released (they only released after failed probe or remove,
> but we use devm_kzalloc to allocate function's interrupt masks during
> device creation and they will get freed only when parent unbinds, etc).
Yeah, we've gotten a metric ton of confusing advice/recommendations
regarding devm_* (most of it offline from linux-input) and it shows. At one point I
was pretty much ready to just bag it all and write our own garbage
collecting storage manager, but figured that would be unlikely to make
it upstream :-)
> Given that you mentioned firmware flash in the work and I expect we'll
> be destroying and re-creating functions and other data structures at
> will I think we should limit use of devm APIs so that lifetime
> management is explicit and clear.
Sounds good.
> I tried adjusting the patch so that it works with the version of PDT
> cleanup patch I posted a few minutes ago, please let me know what you
> think.
There's some comments below. After making those changes, I've applied this to my test tree, and it works well.
I can send updated versions of your two patches, if you'd like.
Thanks!
Chris
>
> Thanks.
>
> Input: synaptics-rmi4 - count IRQs before creating functions
>
> From: Christopher Heiny <cheiny@synaptics.com>
>
> Because creating a function can trigger events that result in the IRQ
> related
> storage being accessed, we need to count the IRQs and allocate their
> storage
> before the functions are created, rather than counting them as the
> functions
> are created and allocating them afterwards. Since we know the number of
> IRQs
> already, we can allocate the mask at function creation time, rather than in
> a post-creation loop. Also, the F01 function_container is needed
> elsewhere,
> so we need to save it here.
>
> In order to keep the IRQ count logic sane in bootloader mode, we move the
> check for bootloader mode from F01 initialization to the IRQ counting
> routine.
>
> Signed-off-by: Christopher Heiny <cheiny@synaptics.com>
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> ---
> drivers/input/rmi4/rmi_driver.c | 250
> +++++++++++++++++++++++----------------
> drivers/input/rmi4/rmi_driver.h | 1 drivers/input/rmi4/rmi_f01.c
> | 9 -
> 3 files changed, 149 insertions(+), 111 deletions(-)
>
> diff --git a/drivers/input/rmi4/rmi_driver.c
> b/drivers/input/rmi4/rmi_driver.c
> index b9eb8a5..3362f58 100644
> --- a/drivers/input/rmi4/rmi_driver.c
> +++ b/drivers/input/rmi4/rmi_driver.c
> @@ -184,6 +184,7 @@ static void rmi_free_function_list(struct rmi_device
> *rmi_dev)
> list_for_each_entry_safe_reverse(fn, tmp,
> &data->function_list, node) {
> list_del(&fn->node);
> + kfree(fn->irq_mask);
> rmi_unregister_function(fn);
> }
> }
> @@ -256,21 +257,20 @@ static int
> rmi_driver_process_config_requests(struct rmi_device *rmi_dev)
> return 0;
> }
> -static void process_one_interrupt(struct rmi_function *fn,
> - unsigned long *irq_status, struct rmi_driver_data *data)
> +static void process_one_interrupt(struct rmi_driver_data *data,
> + struct rmi_function *fn)
> {
> struct rmi_function_handler *fh;
> - DECLARE_BITMAP(irq_bits, data->num_of_irq_regs);
> if (!fn || !fn->dev.driver)
> return;
> fh = to_rmi_function_handler(fn->dev.driver);
> if (fn->irq_mask && fh->attention) {
> - bitmap_and(irq_bits, irq_status, fn->irq_mask,
> - data->irq_count);
> - if (!bitmap_empty(irq_bits, data->irq_count))
> - fh->attention(fn, irq_bits);
> + bitmap_and(data->fn_irq_bits, data->irq_status, fn->irq_mask,
> + data->irq_count);
> + if (!bitmap_empty(data->fn_irq_bits, data->irq_count))
> + fh->attention(fn, data->fn_irq_bits);
> }
> }
> @@ -306,11 +306,9 @@ static int process_interrupt_requests(struct
> rmi_device *rmi_dev)
> * recent kernels (say, 3.3 and higher), this should be switched to
> * use irq_chip.
> */
> - list_for_each_entry(entry, &data->function_list, node) {
> + list_for_each_entry(entry, &data->function_list, node)
> if (entry->irq_mask)
> - process_one_interrupt(entry, data->irq_status,
> - data);
> - }
> + process_one_interrupt(data, entry);
> return 0;
> }
> @@ -469,12 +467,12 @@ static int rmi_driver_reset_handler(struct
> rmi_device *rmi_dev)
> int rmi_driver_irq_get_mask(struct rmi_device *rmi_dev,
> struct rmi_function *fn)
> {
> - int i;
> struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev);
> + int i;
> /* call devm_kcalloc when it will be defined in kernel in future */
> fn->irq_mask = devm_kzalloc(&rmi_dev->dev,
> - BITS_TO_LONGS(data->irq_count)*sizeof(unsigned long),
> + BITS_TO_LONGS(data->irq_count) * sizeof(unsigned long),
> GFP_KERNEL);
> if (fn->irq_mask) {
> @@ -604,7 +602,7 @@ static int rmi_initial_reset(struct rmi_device
> *rmi_dev,
> return error;
> }
> - mdelay(pdata->reset_delay_ms);
> + mdelay(pdata->reset_delay_ms ?: DEFAULT_RESET_DELAY_MS);
> return RMI_SCAN_DONE;
> }
> @@ -613,6 +611,51 @@ static int rmi_initial_reset(struct rmi_device
> *rmi_dev,
> return pdt->page_start == 0 ? RMI_SCAN_CONTINUE : -ENODEV;
> }
> +/* Indicates that flash programming is enabled (bootloader mode). */
> +#define RMI_F01_STATUS_BOOTLOADER(status) (!!((status) & 0x40))
> +
> +/*
> + * Given the PDT entry for F01, read the device status register to
> determine
> + * if we're stuck in bootloader mode or not.
> + *
> + */
> +static int rmi_check_bootloader_mode(struct rmi_device *rmi_dev,
> + const struct pdt_entry *pdt)
> +{
> + int error;
> + u8 device_status;
> +
> + error = rmi_read(rmi_dev, pdt->data_base_addr + pdt->page_start,
> + &device_status);
Since this is applied after your previous patch, then this statement should be:
error = rmi_read(rmi_dev, pdt->data_base_addr, &device_status);
> + if (error) {
> + dev_err(&rmi_dev->dev,
> + "Failed to read device status: %d\n", error);
> + return error;
> + }
> +
> + return RMI_F01_STATUS_BOOTLOADER(device_status);
> +}
> +
> +static int rmi_count_irqs(struct rmi_device *rmi_dev,
> + void *ctx, const struct pdt_entry *pdt)
> +{
> + struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev);
> + int *irq_count = ctx;
> +
> + *irq_count += pdt->interrupt_source_count;
> + if (pdt->function_number == 0x01) {
> + data->f01_bootloader_mode =
> + rmi_check_bootloader_mode(rmi_dev, pdt);
> + if (data->f01_bootloader_mode) {
> + dev_warn(&rmi_dev->dev,
> + "WARNING: RMI4 device is in bootloader mode!\n");
> + return RMI_SCAN_DONE;
We can't stop the scan here, or the IRQ count for Page 0 might be
inaccurate.
> + }
> + }
> +
> + return RMI_SCAN_CONTINUE;
> +}
> +
> static int rmi_create_function(struct rmi_device *rmi_dev,
> void *ctx, const struct pdt_entry *pdt)
> {
> @@ -621,6 +664,7 @@ static int rmi_create_function(struct rmi_device
> *rmi_dev,
> struct rmi_device_platform_data *pdata =
> to_rmi_platform_data(rmi_dev);
> int *current_irq_count = ctx;
> struct rmi_function *fn;
> + int i;
> int error;
> dev_dbg(dev, "Initializing F%02X for %s.\n",
> @@ -634,53 +678,46 @@ static int rmi_create_function(struct rmi_device
> *rmi_dev,
> }
> INIT_LIST_HEAD(&fn->node);
> + rmi_driver_copy_pdt_to_fd(pdt, &fn->fd);
> fn->rmi_dev = rmi_dev;
> - fn->num_of_irqs = pdt->interrupt_source_count;
> + fn->num_of_irqs = pdt->interrupt_source_count;
> fn->irq_pos = *current_irq_count;
> *current_irq_count += fn->num_of_irqs;
> - rmi_driver_copy_pdt_to_fd(pdt, &fn->fd);
> + fn->irq_mask = kcalloc(BITS_TO_LONGS(data->irq_count),
> + sizeof(unsigned long),
> + GFP_KERNEL);
> + if (!fn->irq_mask) {
> + dev_err(dev, "%s: Failed to create irq_mask for F%02X.\n",
> + __func__, pdt->function_number);
> + error = -ENOMEM;
> + goto err_free_mem;
> + }
> +
> + for (i = 0; i < fn->num_of_irqs; i++)
> + __set_bit(fn->irq_pos + i, fn->irq_mask);
> error = rmi_register_function(fn);
> if (error)
> - goto err_free_mem;
> + goto err_free_irq_mask;
> +
> + if (pdt->function_number == 0x01)
> + data->f01_container = fn;
> list_add_tail(&fn->node, &data->function_list);
> - return data->f01_bootloader_mode ? RMI_SCAN_DONE :
> RMI_SCAN_CONTINUE;
> + return pdt->function_number == 0x01 && data->f01_bootloader_mode ?
> + RMI_SCAN_DONE : RMI_SCAN_CONTINUE;
As mentioned before, I think this logic is broken.
> +err_free_irq_mask:
> + kfree(fn->irq_mask);
> err_free_mem:
> kfree(fn);
> return error;
> }
[snip]
^ permalink raw reply
* Re: [PATCH 4/7] HID: sony: Add offsets and battery calculations for parsing Dualshock 4 reports sent via Bluetooth.
From: simon @ 2014-01-29 21:36 UTC (permalink / raw)
Cc: linux-input, jkosina, Frank Praznik
In-Reply-To: <1391016797-12842-5-git-send-email-frank.praznik@oh.rr.com>
> When the controller isn't connected to a power source and the battery is
> discharging, the battery level is reported from 0 to 9 instead of 1 to 11.
> + battery_capacity = rd[offset] & 0x0F;
> if (battery_capacity > 10)
> battery_capacity--;
Hi Frank,
You might want to change this to
--
if (battery_capacity > 10)
battery_capacity = 10;
--
As the report could return values of 12..15, it's just that you haven't
seen them yet.
It might be that they're just giving a rough estimation based on cell
voltage, which might change over temp/life-time... this would also explain
the slightly lower value when the battery is under load.
It would be nice if they had another bit indicating charging, rather than
relying on the (assumed) voltage measurement. But it is what it is.
Cheers,
Simon.
^ permalink raw reply
* PROBLEM: Kernel-Panic when using Apple-Magic-Trackpad
From: Gerrit Addiks @ 2014-01-29 21:15 UTC (permalink / raw)
To: linux-input; +Cc: jkosina
[1.] Kernel-Panic when using Apple-Magic-Trackpad
[2.] When the Linux-Kernel (>v3.11-rc1 in my case) gets used with the
Apple Magic Trackpad, it will Kernel-Panic in one of three ways:
1. Switch to text-based UI and 'display' the panic.
(Photos of that can be found in [7.9.])
2. Restore from the panic and dump all info from above into syslog.
I dont really know if that is really the same kernel-panic,
but it was triggered the exact same way and to my untrained eye it
looks related somehow. Also it just occoured just once and then
never again. The exact output frim syslog can be found in [7.8.]
3. Freeze the whole computer to the point where not even the
numpad-LED works.
It does not matter what computer is used. I have reproduced this panic
on two very different computers (A MacMini5.1 and a Dell MidTower) and
two physical instances of the trackpad, so i strongly assume
that this is only about the software, not caused by hardware fault.
I have reproduced this kernel-panic in many versions between
[v3.11-rc1]
and [v3.13]. I have also done a git bisect (which has eaten up my
whole
weekend) and after 13 long steps i could find the first bad commit:
[b1a1442a23776756b254b69786848a94d92445ba]
[HID: core: fix reporting of raw events]
For those who dont know (or dont want to know):
The Apple Magic Trackpad is a wireless pointing (and gestures)
device
that connects using bluetooth. It is like a big notebook trackpad as
an own device. The linux driver for that thing is synaptics.
(But from the first bad commit it looks like hid is at fault)
This report is based on the launchpad-report #1269600:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1269600
A few photos of the kernel-panic in textmode as well as some more
info's can be found there.
This report was created according to the following guide:
https://www.kernel.org/pub/linux/docs/lkml/reporting-bugs.html
Because this is the first time for me to ever submit a report,
please do not think bad of me if i did something wrong.
I can be contacted via [gerrit@addiks.de] for any questions,
thank you for paying attention to this.
[3.] trackpad, synaptics, bluetooth, kernel-panic
[4.] /proc/version :
Linux version 3.13.0-031300-generic (apw@gomeisa)
(gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) )
#201401192235 SMP Mon Jan 20 03:36:48 UTC 2014
(This is a mainline-kernel acquired from:
[http://kernel.ubuntu.com/~kernel-ppa/mainline/?C=N;O=D])
[5.] I judge myself waaay too low-skilled to understand the oops-tracing.txt
in a short time, but i will try to understand it in the future.
I can just barely code C++ and have little to no internal
knowledge about
the internal kernel.
Maybe someone can help me out here and tell me what to do, thanks.
[6.] I think it is impossible to test this without an Apple-Magic-Trackpad.
But if you do have one: just connect it, use it a while and see the
kernel cry in agony. (You may need to watch the syslog in case the
kernel
survives the panic and just reports about it). In rare cases it
can took
a few hours of use until it breaks, but in the very most cases it
breaks
very in the first minutes.
[7.] Environment:
The following information are collected while the trackpad is
connected
and the linux version from [4.] is used and while the author (me)
does
not dare to touch the trackpad to not cause another kernel-panic.
[7.1.] ver_linux :
If some fields are empty or look unusual you may have an old version.
Compare to the current minimal requirements in Documentation/Changes.
Linux gerrit-testing-1404 3.13.0-031300-generic #201401192235 SMP Mon
Jan 20 03:36:48 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Gnu C 4.8
Gnu make 3.81
binutils 2.24
util-linux 2.20.1
mount support
module-init-tools 15
e2fsprogs 1.42.9
pcmciautils 018
PPP 2.4.5
Linux C Library 2.18
Dynamic linker (ldd) 2.18
Procps 3.3.9
Net-tools 1.60
Kbd 1.15.5
Sh-utils 8.21
wireless-tools 30
Modules Loaded parport_pc ppdev bnep rfcomm intel_rapl
x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel kvm b43
snd_hda_codec_hdmi snd_hda_codec_cirrus crct10dif_pclmul crc32_pclmul
ghash_clmulni_intel aesni_intel aes_x86_64 mac80211 lrw snd_hda_intel
gf128mul snd_hda_codec glue_helper snd_usb_audio i915 snd_usbmidi_lib
ablk_helper snd_hwdep cryptd cfg80211 snd_seq_midi btusb
snd_seq_midi_event hid_roccat_koneplus snd_rawmidi bluetooth hid_roccat
snd_seq snd_pcm ssb drm_kms_helper applesmc hid_roccat_common
hid_appleir snd_seq_device snd_page_alloc joydev drm input_polldev
snd_timer microcode i2c_algo_bit snd apple_gmux shpchp soundcore lpc_ich
lp mei_me mei apple_bl parport bcma mac_hid video hid_generic usbhid hid
tg3 ptp firewire_ohci pps_core firewire_core sdhci_pci crc_itu_t sdhci
[7.2.] /proc/cpuinfo :
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 42
model name : Intel(R) Core(TM) i5-2415M CPU @ 2.30GHz
stepping : 7
microcode : 0x1a
cpu MHz : 1269.582
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall
nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology
nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx
est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt
tsc_deadline_timer aes xsave avx lahf_lm ida arat xsaveopt pln pts
dtherm tpr_shadow vnmi flexpriority ept vpid
bogomips : 4589.28
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 1
[... trimmed down, same as processor 0... ]
processor : 2
[... trimmed down, same as processor 0... ]
processor : 3
[... trimmed down, same as processor 0... ]
[7.3.] /proc/modules :
hid_magicmouse 13722 0 - Live 0x0000000000000000
hidp 24353 1 - Live 0x0000000000000000
parport_pc 36962 0 - Live 0x0000000000000000
ppdev 17711 0 - Live 0x0000000000000000
bnep 19884 2 - Live 0x0000000000000000
rfcomm 74748 12 - Live 0x0000000000000000
intel_rapl 19228 0 - Live 0x0000000000000000
x86_pkg_temp_thermal 14269 0 - Live 0x0000000000000000
intel_powerclamp 19031 0 - Live 0x0000000000000000
coretemp 17728 0 - Live 0x0000000000000000
kvm_intel 144426 0 - Live 0x0000000000000000
kvm 468147 1 kvm_intel, Live 0x0000000000000000
b43 397438 0 - Live 0x0000000000000000
snd_hda_codec_hdmi 46898 1 - Live 0x0000000000000000
snd_hda_codec_cirrus 18855 1 - Live 0x0000000000000000
crct10dif_pclmul 14250 0 - Live 0x0000000000000000
crc32_pclmul 13160 0 - Live 0x0000000000000000
ghash_clmulni_intel 13259 0 - Live 0x0000000000000000
aesni_intel 55720 0 - Live 0x0000000000000000
aes_x86_64 17131 1 aesni_intel, Live 0x0000000000000000
mac80211 654124 1 b43, Live 0x0000000000000000
lrw 13323 1 aesni_intel, Live 0x0000000000000000
snd_hda_intel 57222 3 - Live 0x0000000000000000
gf128mul 14951 1 lrw, Live 0x0000000000000000
snd_hda_codec 199156 3
snd_hda_codec_hdmi,snd_hda_codec_cirrus,snd_hda_intel, Live
0x0000000000000000
glue_helper 14095 1 aesni_intel, Live 0x0000000000000000
snd_usb_audio 156119 3 - Live 0x0000000000000000
i915 816869 3 - Live 0x0000000000000000
snd_usbmidi_lib 29576 1 snd_usb_audio, Live 0x0000000000000000
ablk_helper 13597 1 aesni_intel, Live 0x0000000000000000
snd_hwdep 13613 2 snd_hda_codec,snd_usb_audio, Live 0x0000000000000000
cryptd 20530 3 ghash_clmulni_intel,aesni_intel,ablk_helper, Live
0x0000000000000000
cfg80211 509407 2 b43,mac80211, Live 0x0000000000000000
snd_seq_midi 13324 0 - Live 0x0000000000000000
btusb 28326 0 - Live 0x0000000000000000
snd_seq_midi_event 14899 1 snd_seq_midi, Live 0x0000000000000000
hid_roccat_koneplus 15270 0 - Live 0x0000000000000000
snd_rawmidi 30465 2 snd_usbmidi_lib,snd_seq_midi, Live 0x0000000000000000
bluetooth 411140 27 hidp,bnep,rfcomm,btusb, Live 0x0000000000000000
hid_roccat 13485 1 hid_roccat_koneplus, Live 0x0000000000000000
snd_seq 66061 2 snd_seq_midi,snd_seq_midi_event, Live 0x0000000000000000
snd_pcm 107140 5
snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_usb_audio, Live
0x0000000000000000
ssb 63241 1 b43, Live 0x0000000000000000
drm_kms_helper 53224 1 i915, Live 0x0000000000000000
applesmc 19564 0 - Live 0x0000000000000000
hid_roccat_common 13791 1 hid_roccat_koneplus, Live 0x0000000000000000
hid_appleir 13010 0 - Live 0x0000000000000000
snd_seq_device 14497 3 snd_seq_midi,snd_rawmidi,snd_seq, Live
0x0000000000000000
snd_page_alloc 18798 2 snd_hda_intel,snd_pcm, Live 0x0000000000000000
joydev 17575 0 - Live 0x0000000000000000
drm 308397 4 i915,drm_kms_helper, Live 0x0000000000000000
input_polldev 13896 1 applesmc, Live 0x0000000000000000
snd_timer 30038 2 snd_seq,snd_pcm, Live 0x0000000000000000
microcode 23788 0 - Live 0x0000000000000000
i2c_algo_bit 13564 1 i915, Live 0x0000000000000000
snd 73850 24
snd_hda_codec_hdmi,snd_hda_codec_cirrus,snd_hda_intel,snd_hda_codec,snd_usb_audio,snd_usbmidi_lib,snd_hwdep,snd_seq_midi,snd_rawmidi,snd_seq,snd_pcm,snd_seq_device,snd_timer,
Live 0x0000000000000000
apple_gmux 13690 0 - Live 0x0000000000000000
shpchp 37201 0 - Live 0x0000000000000000
soundcore 12680 1 snd, Live 0x0000000000000000
lpc_ich 21163 0 - Live 0x0000000000000000
lp 17799 0 - Live 0x0000000000000000
mei_me 18578 0 - Live 0x0000000000000000
mei 82671 1 mei_me, Live 0x0000000000000000
apple_bl 13993 1 apple_gmux, Live 0x0000000000000000
parport 42481 3 parport_pc,ppdev,lp, Live 0x0000000000000000
bcma 52421 1 b43, Live 0x0000000000000000
mac_hid 13253 0 - Live 0x0000000000000000
video 19859 2 i915,apple_gmux, Live 0x0000000000000000
hid_generic 12548 0 - Live 0x0000000000000000
usbhid 53067 0 - Live 0x0000000000000000
hid 106254 6
hid_magicmouse,hidp,hid_roccat_koneplus,hid_appleir,hid_generic,usbhid,
Live 0x0000000000000000
tg3 174880 0 - Live 0x0000000000000000
ptp 18980 1 tg3, Live 0x0000000000000000
firewire_ohci 45158 0 - Live 0x0000000000000000
pps_core 19381 1 ptp, Live 0x0000000000000000
firewire_core 69362 1 firewire_ohci, Live 0x0000000000000000
sdhci_pci 19241 0 - Live 0x0000000000000000
crc_itu_t 12707 1 firewire_core, Live 0x0000000000000000
sdhci 43409 1 sdhci_pci, Live 0x0000000000000000
[7.4.] A: /proc/ioports
0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0062-0062 : EC data
0064-0064 : keyboard
0066-0066 : EC cmd
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0300-031f : applesmc
0400-0403 : ACPI PM1a_EVT_BLK
0404-0405 : ACPI PM1a_CNT_BLK
0408-040b : ACPI PM_TMR
0410-0415 : ACPI CPU throttle
0420-042f : ACPI GPE0_BLK
0430-0433 : iTCO_wdt
0450-0450 : ACPI PM2_CNT_BLK
0460-047f : iTCO_wdt
0500-057f : pnp 00:04
0cf8-0cff : PCI conf1
0d00-ffff : PCI Bus 0000:00
1000-100f : pnp 00:04
2000-203f : 0000:00:02.0
2060-206f : 0000:00:1f.2
2060-206f : ata_piix
20c0-20df : 0000:00:1d.0
20c0-20df : uhci_hcd
2120-213f : 0000:00:1a.0
2120-213f : uhci_hcd
2140-2147 : 0000:00:1f.2
2140-2147 : ata_piix
2148-214f : 0000:00:1f.2
2148-214f : ata_piix
2158-215b : 0000:00:1f.2
2158-215b : ata_piix
215c-215f : 0000:00:1f.2
215c-215f : ata_piix
3000-3fff : PCI Bus 0000:06
efa0-efbf : 0000:00:1f.3
ffe0-ffef : 0000:00:1f.2
ffe0-ffef : ata_piix
[7.4.] B: /proc/iomem
00000000-00000fff : reserved
00001000-0008efff : System RAM
0008f000-0008ffff : reserved
00090000-0009fbff : System RAM
0009fc00-000fffff : reserved
000a0000-000bffff : PCI Bus 0000:00
000c0000-000cedff : Video ROM
000f0000-000fffff : System ROM
00100000-1fffffff : System RAM
01000000-0174d25d : Kernel code
0174d25e-01d1a3bf : Kernel data
01e74000-01fdafff : Kernel bss
20000000-201fffff : reserved
20000000-201fffff : pnp 00:09
20200000-3fffffff : System RAM
40000000-401fffff : reserved
40000000-401fffff : pnp 00:09
40200000-8ad33fff : System RAM
8ad34000-8ad5efff : ACPI Non-volatile Storage
8ad5f000-8afa1fff : ACPI Tables
8afa2000-8affefff : reserved
8afff000-8affffff : ACPI Tables
8b000000-8f9fffff : reserved
8ba00000-8f9fffff : Graphics Stolen Memory
8fa00000-feafffff : PCI Bus 0000:00
90000000-9fffffff : 0000:00:02.0
90000000-9012bfff : BOOTFB
a0000000-a03fffff : 0000:00:02.0
a0400000-a04fffff : PCI Bus 0000:02
a0400000-a040ffff : 0000:02:00.0
a0400000-a040ffff : tg3
a0410000-a041ffff : 0000:02:00.0
a0410000-a041ffff : tg3
a0420000-a042ffff : 0000:02:00.1
a0420000-a042ffff : mmc0
a0500000-a05fffff : PCI Bus 0000:04
a0500000-a05fffff : PCI Bus 0000:05
a0500000-a0503fff : 0000:05:00.0
a0504000-a05047ff : 0000:05:00.0
a0504000-a05047ff : firewire_ohci
a0600000-a06fffff : PCI Bus 0000:03
a0600000-a0603fff : 0000:03:00.0
a0600000-a0603fff : bcma-pci-bridge
a0700000-a07fffff : PCI Bus 0000:02
a0800000-a08fffff : PCI Bus 0000:01
a0900000-a0903fff : 0000:00:1b.0
a0900000-a0903fff : ICH HD audio
a0906800-a0906bff : 0000:00:1d.7
a0906800-a0906bff : ehci_hcd
a0906c00-a0906fff : 0000:00:1a.7
a0906c00-a0906fff : ehci_hcd
a0907000-a09070ff : 0000:00:1f.3
a0907100-a090710f : 0000:00:16.0
a0907100-a090710f : mei_me
a0a00000-a4efffff : PCI Bus 0000:06
a4f00000-a8efffff : PCI Bus 0000:06
e0000000-efffffff : reserved
e0000000-efffffff : pnp 00:08
e0000000-e9cfffff : PCI MMCONFIG 0000 [bus 00-9c]
fec00000-fec00fff : reserved
fec00000-fec003ff : IOAPIC 0
fed00000-fed03fff : reserved
fed00000-fed003ff : HPET 0
fed00000-fed003ff : pnp 00:02
fed10000-fed13fff : reserved
fed18000-fed19fff : reserved
fed18000-fed18fff : pnp 00:08
fed19000-fed19fff : pnp 00:08
fed1c000-fed1ffff : reserved
fed1c000-fed1ffff : pnp 00:08
fed1f410-fed1f414 : iTCO_wdt
fed20000-fed3ffff : pnp 00:08
fed40000-fed44fff : PCI Bus 0000:00
fed45000-fed8ffff : pnp 00:08
fed90000-fed93fff : pnp 00:08
fee00000-fee00fff : Local APIC
fee00000-fee00fff : reserved
ff800000-ffffffff : reserved
100000000-26fdfffff : System RAM
26fe00000-26fffffff : RAM buffer
[7.5.] lspci -vvv
00:00.0 Host bridge: Intel Corporation 2nd Generation Core Processor
Family DRAM Controller (rev 09)
Subsystem: Apple Inc. Device 00e6
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort+ >SERR- <PERR- INTx-
Latency: 0
Capabilities: [e0] Vendor Specific Information: Len=0c <?>
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200/2nd Generation Core
Processor Family PCI Express Root Port (rev 09) (prog-if 00 [Normal decode])
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 256 bytes
Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
I/O behind bridge: 0000f000-00000fff
Memory behind bridge: a0800000-a08fffff
Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff
Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [88] Subsystem: Apple Inc. Device 00e6
Capabilities: [80] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit-
Address: fee0f00c Data: 4191
Capabilities: [a0] Express (v2) Root Port (Slot+), MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s
<64ns, L1 <1us
ExtTag- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr-
TransPend-
LnkCap: Port #2, Speed 5GT/s, Width x8, ASPM L0s L1, Latency
L0 <1us, L1 <4us
ClockPM- Surprise- LLActRep- BwNot+
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled+ Retrain- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x0, TrErr- Train- SlotClk+
DLActive- BWMgmt- ABWMgmt-
SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug-
Surprise-
Slot #1, PowerLimit 75.000W; Interlock- NoCompl+
SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt-
HPIrq- LinkChg-
Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock-
SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet-
Interlock-
Changed: MRL- PresDet- LinkState-
RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna+
CRSVisible-
RootCap: CRSVisible-
RootSta: PME ReqID 0000, PMEStatus- PMEPending-
DevCap2: Completion Timeout: Not Supported, TimeoutDis- ARIFwd-
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- ARIFwd-
LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-,
Selectable De-emphasis: -3.5dB
Transmit Margin: Normal Operating Range,
EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -6dB,
EqualizationComplete-, EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-,
LinkEqualizationRequest-
Capabilities: [100 v1] Virtual Channel
Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
Arb: Fixed- WRR32- WRR64- WRR128-
Ctrl: ArbSelect=Fixed
Status: InProgress-
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed+ WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
Status: NegoPending- InProgress-
Capabilities: [140 v1] Root Complex Link
Desc: PortNumber=02 ComponentID=01 EltType=Config
Link0: Desc: TargetPort=00 TargetComponent=01 AssocRCRB-
LinkType=MemMapped LinkValid+
Addr: 00000000fed19000
Kernel driver in use: pcieport
00:01.1 PCI bridge: Intel Corporation Xeon E3-1200/2nd Generation Core
Processor Family PCI Express Root Port (rev 09) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 256 bytes
Bus: primary=00, secondary=06, subordinate=9c, sec-latency=0
I/O behind bridge: 00003000-00003fff
Memory behind bridge: a0a00000-a4efffff
Prefetchable memory behind bridge: 00000000a4f00000-00000000a8efffff
Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [88] Subsystem: Apple Inc. Device 00e6
Capabilities: [80] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit-
Address: fee0f00c Data: 41a1
Capabilities: [a0] Express (v2) Root Port (Slot+), MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s
<64ns, L1 <1us
ExtTag- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr-
TransPend-
LnkCap: Port #3, Speed 5GT/s, Width x8, ASPM L0s L1, Latency
L0 <256ns, L1 <4us
ClockPM- Surprise- LLActRep- BwNot+
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled+ Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 5GT/s, Width x4, TrErr- Train- SlotClk+
DLActive- BWMgmt+ ABWMgmt-
SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug-
Surprise-
Slot #2, PowerLimit 75.000W; Interlock- NoCompl+
SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt-
HPIrq- LinkChg-
Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock-
SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet+
Interlock-
Changed: MRL- PresDet+ LinkState-
RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna+
CRSVisible-
RootCap: CRSVisible-
RootSta: PME ReqID 0000, PMEStatus- PMEPending-
DevCap2: Completion Timeout: Not Supported, TimeoutDis- ARIFwd-
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- ARIFwd-
LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-,
Selectable De-emphasis: -3.5dB
Transmit Margin: Normal Operating Range,
EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -3.5dB,
EqualizationComplete-, EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-,
LinkEqualizationRequest-
Capabilities: [100 v1] Virtual Channel
Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
Arb: Fixed- WRR32- WRR64- WRR128-
Ctrl: ArbSelect=Fixed
Status: InProgress-
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed+ WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
Status: NegoPending- InProgress-
Capabilities: [140 v1] Root Complex Link
Desc: PortNumber=03 ComponentID=01 EltType=Config
Link0: Desc: TargetPort=00 TargetComponent=01 AssocRCRB-
LinkType=MemMapped LinkValid+
Addr: 00000000fed19000
Kernel driver in use: pcieport
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core
Processor Family Integrated Graphics Controller (rev 09) (prog-if 00
[VGA controller])
Subsystem: Apple Inc. Device 00e6
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 46
Region 0: Memory at a0000000 (64-bit, non-prefetchable) [size=4M]
Region 2: Memory at 90000000 (64-bit, prefetchable) [size=256M]
Region 4: I/O ports at 2000 [size=64]
Expansion ROM at <unassigned> [disabled]
Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit-
Address: fee0f00c Data: 4152
Capabilities: [d0] Power Management version 2
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [a4] PCI Advanced Features
AFCap: TP+ FLR+
AFCtrl: FLR-
AFStatus: TP-
Kernel driver in use: i915
00:16.0 Communication controller: Intel Corporation 6 Series/C200 Series
Chipset Family MEI Controller #1 (rev 04)
Subsystem: Intel Corporation Apple MacBookPro8,2 [Core i7, 15", 2011]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 45
Region 0: Memory at a0907100 (64-bit, non-prefetchable) [size=16]
Capabilities: [50] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [8c] MSI: Enable+ Count=1/1 Maskable- 64bit+
Address: 00000000fee0f00c Data: 4142
Kernel driver in use: mei_me
00:1a.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset
Family USB Universal Host Controller #5 (rev 05) (prog-if 00 [UHCI])
Subsystem: Intel Corporation Apple MacBookPro8,2 [Core i7, 15", 2011]
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin B routed to IRQ 21
Region 4: I/O ports at 2120 [size=32]
Capabilities: [50] PCI Advanced Features
AFCap: TP+ FLR+
AFCtrl: FLR-
AFStatus: TP-
Kernel driver in use: uhci_hcd
00:1a.7 USB controller: Intel Corporation 6 Series/C200 Series Chipset
Family USB Enhanced Host Controller #2 (rev 05) (prog-if 20 [EHCI])
Subsystem: Intel Corporation Apple MacBookPro8,2 [Core i7, 15", 2011]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 23
Region 0: Memory at a0906c00 (32-bit, non-prefetchable) [size=1K]
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA
PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [58] Debug port: BAR=1 offset=00a0
Capabilities: [98] PCI Advanced Features
AFCap: TP+ FLR+
AFCtrl: FLR-
AFStatus: TP+
Kernel driver in use: ehci-pci
00:1b.0 Audio device: Intel Corporation 6 Series/C200 Series Chipset
Family High Definition Audio Controller (rev 05)
Subsystem: Intel Corporation Apple MacBookPro8,2 [Core i7, 15", 2011]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 256 bytes
Interrupt: pin A routed to IRQ 47
Region 0: Memory at a0900000 (64-bit, non-prefetchable) [size=16K]
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=55mA
PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit+
Address: 00000000fee0f00c Data: 4162
Capabilities: [70] Express (v1) Root Complex Integrated Endpoint,
MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s
<64ns, L1 <1us
ExtTag- RBE- FLReset+
DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+
TransPend-
LnkCap: Port #0, Speed unknown, Width x0, ASPM unknown,
Latency L0 <64ns, L1 <1us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed unknown, Width x0, TrErr- Train- SlotClk-
DLActive- BWMgmt- ABWMgmt-
Capabilities: [100 v1] Virtual Channel
Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
Arb: Fixed- WRR32- WRR64- WRR128-
Ctrl: ArbSelect=Fixed
Status: InProgress-
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=01
Status: NegoPending- InProgress-
VC1: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable+ ID=1 ArbSelect=Fixed TC/VC=22
Status: NegoPending- InProgress-
Capabilities: [130 v1] Root Complex Link
Desc: PortNumber=0f ComponentID=00 EltType=Config
Link0: Desc: TargetPort=00 TargetComponent=00 AssocRCRB-
LinkType=MemMapped LinkValid+
Addr: 00000000fed1c000
Kernel driver in use: snd_hda_intel
00:1c.0 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset
Family PCI Express Root Port 1 (rev b5) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 256 bytes
Bus: primary=00, secondary=02, subordinate=02, sec-latency=0
I/O behind bridge: 0000f000-00000fff
Memory behind bridge: a0700000-a07fffff
Prefetchable memory behind bridge: 00000000a0400000-00000000a04fffff
Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort+ <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [40] Express (v2) Root Port (Slot+), MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s
<64ns, L1 <1us
ExtTag- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal+ Fatal+
Unsupported+
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+
TransPend-
LnkCap: Port #1, Speed 5GT/s, Width x1, ASPM L0s L1, Latency
L0 <512ns, L1 <16us
ClockPM- Surprise- LLActRep+ BwNot-
LnkCtl: ASPM L1 Enabled; RCB 64 bytes Disabled- Retrain-
CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+
DLActive+ BWMgmt+ ABWMgmt-
SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug-
Surprise-
Slot #0, PowerLimit 10.000W; Interlock- NoCompl+
SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt-
HPIrq- LinkChg-
Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock-
SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet+
Interlock-
Changed: MRL- PresDet- LinkState+
RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna+
CRSVisible-
RootCap: CRSVisible-
RootSta: PME ReqID 0000, PMEStatus- PMEPending-
DevCap2: Completion Timeout: Range BC, TimeoutDis+ ARIFwd-
DevCtl2: Completion Timeout: 260ms to 900ms, TimeoutDis- ARIFwd-
LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-,
Selectable De-emphasis: -6dB
Transmit Margin: Normal Operating Range,
EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -3.5dB,
EqualizationComplete-, EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-,
LinkEqualizationRequest-
Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit-
Address: fee0f00c Data: 41b1
Capabilities: [90] Subsystem: Intel Corporation Apple MacBookPro8,2
[Core i7, 15", 2011]
Capabilities: [a0] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Kernel driver in use: pcieport
00:1c.1 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset
Family PCI Express Root Port 2 (rev b5) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 256 bytes
Bus: primary=00, secondary=03, subordinate=03, sec-latency=0
I/O behind bridge: 0000f000-00000fff
Memory behind bridge: a0600000-a06fffff
Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff
Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort+ <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [40] Express (v2) Root Port (Slot+), MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s
<64ns, L1 <1us
ExtTag- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal+ Fatal+
Unsupported+
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+
TransPend-
LnkCap: Port #2, Speed 5GT/s, Width x1, ASPM L0s L1, Latency
L0 <512ns, L1 <16us
ClockPM- Surprise- LLActRep+ BwNot-
LnkCtl: ASPM L0s L1 Enabled; RCB 64 bytes Disabled- Retrain-
CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+
DLActive+ BWMgmt+ ABWMgmt-
SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug-
Surprise-
Slot #0, PowerLimit 10.000W; Interlock- NoCompl+
SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt-
HPIrq- LinkChg-
Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock-
SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet+
Interlock-
Changed: MRL- PresDet- LinkState+
RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna+
CRSVisible-
RootCap: CRSVisible-
RootSta: PME ReqID 0000, PMEStatus- PMEPending-
DevCap2: Completion Timeout: Range BC, TimeoutDis+ ARIFwd-
DevCtl2: Completion Timeout: 260ms to 900ms, TimeoutDis- ARIFwd-
LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-,
Selectable De-emphasis: -6dB
Transmit Margin: Normal Operating Range,
EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -3.5dB,
EqualizationComplete-, EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-,
LinkEqualizationRequest-
Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit-
Address: fee0f00c Data: 41d1
Capabilities: [90] Subsystem: Intel Corporation Apple MacBookPro8,2
[Core i7, 15", 2011]
Capabilities: [a0] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Kernel driver in use: pcieport
00:1c.2 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset
Family PCI Express Root Port 3 (rev b5) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 256 bytes
Bus: primary=00, secondary=04, subordinate=05, sec-latency=0
I/O behind bridge: 0000f000-00000fff
Memory behind bridge: a0500000-a05fffff
Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff
Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort+ <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [40] Express (v2) Root Port (Slot+), MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s
<64ns, L1 <1us
ExtTag- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal+ Fatal+
Unsupported+
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+
TransPend-
LnkCap: Port #3, Speed 5GT/s, Width x1, ASPM L0s L1, Latency
L0 <512ns, L1 <16us
ClockPM- Surprise- LLActRep+ BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+
DLActive+ BWMgmt+ ABWMgmt-
SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug-
Surprise-
Slot #0, PowerLimit 10.000W; Interlock- NoCompl+
SltCtl: Enable: AttnBtn- PwrFlt- MRL- PresDet- CmdCplt-
HPIrq- LinkChg-
Control: AttnInd Unknown, PwrInd Unknown, Power- Interlock-
SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet+
Interlock-
Changed: MRL- PresDet- LinkState+
RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna+
CRSVisible-
RootCap: CRSVisible-
RootSta: PME ReqID 0000, PMEStatus- PMEPending-
DevCap2: Completion Timeout: Range BC, TimeoutDis+ ARIFwd-
DevCtl2: Completion Timeout: 260ms to 900ms, TimeoutDis- ARIFwd-
LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-,
Selectable De-emphasis: -6dB
Transmit Margin: Normal Operating Range,
EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -3.5dB,
EqualizationComplete-, EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-,
LinkEqualizationRequest-
Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit-
Address: fee0f00c Data: 4122
Capabilities: [90] Subsystem: Intel Corporation Apple MacBookPro8,2
[Core i7, 15", 2011]
Capabilities: [a0] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Kernel driver in use: pcieport
00:1d.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset
Family USB Universal Host Controller #1 (rev 05) (prog-if 00 [UHCI])
Subsystem: Intel Corporation Apple MacBookPro8,2 [Core i7, 15", 2011]
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin B routed to IRQ 19
Region 4: I/O ports at 20c0 [size=32]
Capabilities: [50] PCI Advanced Features
AFCap: TP+ FLR+
AFCtrl: FLR-
AFStatus: TP-
Kernel driver in use: uhci_hcd
00:1d.7 USB controller: Intel Corporation 6 Series/C200 Series Chipset
Family USB Enhanced Host Controller #1 (rev 05) (prog-if 20 [EHCI])
Subsystem: Intel Corporation Apple MacBookPro8,2 [Core i7, 15", 2011]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 22
Region 0: Memory at a0906800 (32-bit, non-prefetchable) [size=1K]
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA
PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [58] Debug port: BAR=1 offset=00a0
Capabilities: [98] PCI Advanced Features
AFCap: TP+ FLR+
AFCtrl: FLR-
AFStatus: TP-
Kernel driver in use: ehci-pci
00:1f.0 ISA bridge: Intel Corporation HM65 Express Chipset Family LPC
Controller (rev 05)
Subsystem: Intel Corporation Apple MacBookPro8,2 [Core i7, 15", 2011]
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Capabilities: [e0] Vendor Specific Information: Len=0c <?>
Kernel driver in use: lpc_ich
00:1f.2 IDE interface: Intel Corporation 6 Series/C200 Series Chipset
Family 4 port SATA IDE Controller (rev 05) (prog-if 8f [Master SecP SecO
PriP PriO])
Subsystem: Intel Corporation Device 7270
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin B routed to IRQ 19
Region 0: I/O ports at 2148 [size=8]
Region 1: I/O ports at 215c [size=4]
Region 2: I/O ports at 2140 [size=8]
Region 3: I/O ports at 2158 [size=4]
Region 4: I/O ports at 2060 [size=16]
Region 5: I/O ports at ffe0 [size=16]
Capabilities: [70] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [b0] PCI Advanced Features
AFCap: TP+ FLR+
AFCtrl: FLR-
AFStatus: TP-
Kernel driver in use: ata_piix
00:1f.3 SMBus: Intel Corporation 6 Series/C200 Series Chipset Family
SMBus Controller (rev 05)
Subsystem: Intel Corporation Apple MacBookPro8,2 [Core i7, 15", 2011]
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin C routed to IRQ 11
Region 0: Memory at a0907000 (64-bit, non-prefetchable) [size=256]
Region 4: I/O ports at efa0 [size=32]
02:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM57765
Gigabit Ethernet PCIe (rev 10)
Subsystem: Broadcom Corporation NetXtreme BCM57765 Gigabit Ethernet
PCIe
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 256 bytes
Interrupt: pin A routed to IRQ 16
Region 0: Memory at a0400000 (64-bit, prefetchable) [size=64K]
Region 2: Memory at a0410000 (64-bit, prefetchable) [size=64K]
Capabilities: [48] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=1 PME-
Capabilities: [58] MSI: Enable- Count=1/8 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [a0] MSI-X: Enable+ Count=6 Masked-
Vector table: BAR=2 offset=00000000
PBA: BAR=2 offset=00000120
Capabilities: [ac] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <4us,
L1 <64us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr+ NoSnoop-
MaxPayload 128 bytes, MaxReadReq 4096 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+
TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1,
Latency L0 <2us, L1 <64us
ClockPM+ Surprise- LLActRep- BwNot-
LnkCtl: ASPM L1 Enabled; RCB 64 bytes Disabled- Retrain-
CommClk+
ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+
DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range ABCD, TimeoutDis+
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance-
SpeedDis-, Selectable De-emphasis: -6dB
Transmit Margin: Normal Operating Range,
EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -6dB,
EqualizationComplete-, EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-,
LinkEqualizationRequest-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt-
RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
Capabilities: [13c v1] Device Serial Number 00-00-3c-07-54-53-3a-a7
Capabilities: [150 v1] Power Budgeting <?>
Capabilities: [160 v1] Virtual Channel
Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
Arb: Fixed- WRR32- WRR64- WRR128-
Ctrl: ArbSelect=Fixed
Status: InProgress-
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
Status: NegoPending- InProgress-
Kernel driver in use: tg3
02:00.1 SD Host controller: Broadcom Corporation BCM57765/57785 SDXC/MMC
Card Reader (rev 10) (prog-if 01)
Subsystem: Broadcom Corporation Device 0000
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 256 bytes
Interrupt: pin B routed to IRQ 17
Region 0: Memory at a0420000 (64-bit, prefetchable) [size=64K]
Capabilities: [48] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=1 PME-
Capabilities: [58] MSI: Enable- Count=1/1 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [ac] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <4us,
L1 <64us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
Unsupported-
RlxdOrd+ ExtTag- PhantFunc- AuxPwr+ NoSnoop+
MaxPayload 128 bytes, MaxReadReq 4096 bytes
DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr+
TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1,
Latency L0 <2us, L1 <64us
ClockPM+ Surprise- LLActRep- BwNot-
LnkCtl: ASPM L1 Enabled; RCB 64 bytes Disabled- Retrain-
CommClk+
ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+
DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range ABCD, TimeoutDis+
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance-
SpeedDis-, Selectable De-emphasis: -6dB
Transmit Margin: Normal Operating Range,
EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -6dB,
EqualizationComplete-, EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-,
LinkEqualizationRequest-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt-
RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
Capabilities: [150 v1] Power Budgeting <?>
Capabilities: [160 v1] Virtual Channel
Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
Arb: Fixed- WRR32- WRR64- WRR128-
Ctrl: ArbSelect=Fixed
Status: InProgress-
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
Status: NegoPending- InProgress-
Kernel driver in use: sdhci-pci
03:00.0 Network controller: Broadcom Corporation BCM4331 802.11a/b/g/n
(rev 02)
Subsystem: Broadcom Corporation BCM4331 802.11a/b/g/n
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 256 bytes
Interrupt: pin A routed to IRQ 17
Region 0: Memory at a0600000 (64-bit, non-prefetchable) [size=16K]
Capabilities: [40] Power Management version 3
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=2 PME-
Capabilities: [58] Vendor Specific Information: Len=78 <?>
Capabilities: [48] MSI: Enable- Count=1/1 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [d0] Express (v1) Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <4us,
L1 unlimited
ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 512 bytes
DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr+
TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1,
Latency L0 <2us, L1 <32us
ClockPM+ Surprise- LLActRep+ BwNot-
LnkCtl: ASPM L0s L1 Enabled; RCB 64 bytes Disabled- Retrain-
CommClk+
ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+
DLActive+ BWMgmt- ABWMgmt-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt-
RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP+ Rollover- Timeout- NonFatalErr+
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 14, GenCap+ CGenEn- ChkCap+ ChkEn-
Capabilities: [13c v1] Virtual Channel
Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
Arb: Fixed- WRR32- WRR64- WRR128-
Ctrl: ArbSelect=Fixed
Status: InProgress-
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
Status: NegoPending- InProgress-
Capabilities: [160 v1] Device Serial Number 00-00-00-ff-ff-00-00-00
Capabilities: [16c v1] Power Budgeting <?>
Kernel driver in use: bcma-pci-bridge
04:00.0 PCI bridge: Texas Instruments XIO2213A/B/XIO2221 PCI Express to
PCI Bridge [Cheetah Express] (rev 01) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 256 bytes
Bus: primary=04, secondary=05, subordinate=05, sec-latency=0
I/O behind bridge: 0000f000-00000fff
Memory behind bridge: a0500000-a05fffff
Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff
Secondary status: 66MHz+ FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort+ <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA- VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [50] Power Management version 3
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Bridge: PM- B3+
Capabilities: [60] MSI: Enable- Count=1/16 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [80] Subsystem: Device 0000:0000
Capabilities: [90] Express (v1) PCI/PCI-X Bridge, MSI 00
DevCap: MaxPayload 512 bytes, PhantFunc 0, Latency L0s
<64ns, L1 <1us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop+ BrConfRtry-
MaxPayload 128 bytes, MaxReadReq 512 bytes
DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr-
TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1,
Latency L0 <512ns, L1 <16us
ClockPM+ Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk+
ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+
DLActive- BWMgmt- ABWMgmt-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt-
RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 14, GenCap+ CGenEn- ChkCap+ ChkEn-
05:00.0 FireWire (IEEE 1394): Texas Instruments XIO2213A/B/XIO2221
IEEE-1394b OHCI Controller [Cheetah Express] (rev 01) (prog-if 10 [OHCI])
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 248 (500ns min, 1000ns max), Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 18
Region 0: Memory at a0504000 (32-bit, non-prefetchable) [size=2K]
Region 1: Memory at a0500000 (32-bit, non-prefetchable) [size=16K]
Capabilities: [44] Power Management version 3
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA
PME(D0+,D1+,D2+,D3hot+,D3cold-)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME+
Kernel driver in use: firewire_ohci
[7.6.] /proc/scsi/scsi :
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: ATA Model: Hitachi HTS54505 Rev: PB4A
Type: Direct-Access ANSI SCSI revision: 05
[7.7.] git bisect log
git bisect start
# good: [8bb495e3f02401ee6f76d1b1d77f3ac9f079e376] Linux 3.10
git bisect good 8bb495e3f02401ee6f76d1b1d77f3ac9f079e376
# bad: [ad81f0545ef01ea651886dddac4bef6cec930092] Linux 3.11-rc1
git bisect bad ad81f0545ef01ea651886dddac4bef6cec930092
# good: [1286da8bc009cb2aee7f285e94623fc974c0c983] Merge tag
'sound-3.11' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
git bisect good 1286da8bc009cb2aee7f285e94623fc974c0c983
# bad: [1b375dc30710180c4b88cc59caba6e3481ec5c8b] mutex: Move ww_mutex
definitions to ww_mutex.h
git bisect bad 1b375dc30710180c4b88cc59caba6e3481ec5c8b
# bad: [899dd388853071f5c8848545209d4e2c5d95b1d9] Merge tag
'for-linus-3.11-merge-window-part-1' of
git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs
git bisect bad 899dd388853071f5c8848545209d4e2c5d95b1d9
# bad: [f5b63ac0f77ecab46796ba5d368ea5dd51834e6e] Merge branch
'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
git bisect bad f5b63ac0f77ecab46796ba5d368ea5dd51834e6e
# bad: [3366dd9fa887ebbda4872e9554f853eaeda764be] Merge branch
'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
git bisect bad 3366dd9fa887ebbda4872e9554f853eaeda764be
# good: [c039e3a8ddd52139d0f81711ecd757772f868b22] powerpc: Handle both
new style and old style reserve maps
git bisect good c039e3a8ddd52139d0f81711ecd757772f868b22
# good: [e61aca5158a84932cf9fbbcbf8aef9cef63f5026] Merge branch
'kconfig-diet' from Dave Hansen
git bisect good e61aca5158a84932cf9fbbcbf8aef9cef63f5026
# good: [b8e0fe31a7c8623741f91bc27f925220341fdf81] HID: wiimote: support
Nintendo Wii U Pro Controller
git bisect good b8e0fe31a7c8623741f91bc27f925220341fdf81
# bad: [08ec2dcc3527a20c619aca2fb36f800908256bac] Merge branches
'for-3.11/multitouch', 'for-3.11/sony' and 'for-3.11/upstream' into
for-linus
git bisect bad 08ec2dcc3527a20c619aca2fb36f800908256bac
# good: [db58316892a5e9034efe718d4c1630788db7528f] Merge branches
'for-3.11/battery', 'for-3.11/elo', 'for-3.11/holtek' and
'for-3.11/i2c-hid-fixed' into for-linus
git bisect good db58316892a5e9034efe718d4c1630788db7528f
# bad: [a688393bd3fb27690a77f7ae8607b4969039bac5] HID: explain
out-of-range check better
git bisect bad a688393bd3fb27690a77f7ae8607b4969039bac5
# bad: [b1a1442a23776756b254b69786848a94d92445ba] HID: core: fix
reporting of raw events
git bisect bad b1a1442a23776756b254b69786848a94d92445ba
# good: [68e353fe476e7dab4644b9e7b4979b72726397ae] HID: add support for
Huion 580 tablet
git bisect good 68e353fe476e7dab4644b9e7b4979b72726397ae
# first bad commit: [b1a1442a23776756b254b69786848a94d92445ba] HID:
core: fix reporting of raw events
[7.8.] Information from syslog when kernel recovers
Jan 26 00:55:46 gerrit-testing-1404 colord: Profile added:
icc-e78de847fc92f70fe2135cbd74d84353
Jan 26 00:55:48 gerrit-testing-1404 dbus[617]: [system] Activating
service name='org.freedesktop.UDisks2' (using servicehelper)
Jan 26 00:55:48 gerrit-testing-1404 udisksd[2304]: udisks daemon version
2.1.2 starting
Jan 26 00:55:48 gerrit-testing-1404 dbus[617]: [system] Successfully
activated service 'org.freedesktop.UDisks2'
Jan 26 00:55:48 gerrit-testing-1404 udisksd[2304]: Acquired the name
org.freedesktop.UDisks2 on the system message bus
Jan 26 00:55:49 gerrit-testing-1404 udisksd[2304]: Cleaning up mount
point /media/gerrit/a0632e71-0eb0-47f5-878c-20d0533ba044 (device 8:6 is
not mounted)
Jan 26 00:56:04 gerrit-testing-1404 bluetoothd[647]: Endpoint
unregistered: sender=:1.45 path=/MediaEndpoint/HFPAG
Jan 26 00:56:04 gerrit-testing-1404 bluetoothd[647]: Endpoint
unregistered: sender=:1.45 path=/MediaEndpoint/HFPHS
Jan 26 00:56:04 gerrit-testing-1404 bluetoothd[647]: Endpoint
unregistered: sender=:1.45 path=/MediaEndpoint/A2DPSource
Jan 26 00:56:04 gerrit-testing-1404 bluetoothd[647]: Endpoint
unregistered: sender=:1.45 path=/MediaEndpoint/A2DPSink
Jan 26 00:56:24 gerrit-testing-1404 kernel: [ 174.632667] Bluetooth:
HIDP (Human Interface Emulation) ver 1.2
Jan 26 00:56:24 gerrit-testing-1404 kernel: [ 174.632685] Bluetooth:
HIDP socket layer initialized
Jan 26 00:56:27 gerrit-testing-1404 kernel: [ 177.740013] magicmouse
0005:05AC:030E.0008: unknown main item tag 0x0
Jan 26 00:56:27 gerrit-testing-1404 kernel: [ 177.740083] input: as
/devices/pci0000:00/0000:00:1a.7/usb1/1-1/1-1.1/1-1.1.3/1-1.1.3:1.0/bluetooth/hci0/hci0:12/input17
Jan 26 00:56:27 gerrit-testing-1404 kernel: [ 177.740236] magicmouse
0005:05AC:030E.0008: input,hidraw2: BLUETOOTH HID v1.60 Mouse [] on
68:a8:6d:57:8f:80
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.211489] BUG: unable
to handle kernel NULL pointer dereference at 0000000000000048
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.211556] IP:
[<ffffffff8105cb16>] do_exit+0x2e6/0xa30
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.211592] PGD 0
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.211607] Thread
overran stack, or stack corrupted
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.211635] Oops: 0000
[#1] SMP
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.211659] Modules
linked in: hid_magicmouse hidp parport_pc ppdev rfcomm bnep b43 mac80211
i915 intel_powerclamp coretemp kvm_intel kvm cfg80211 snd_hda_codec_hdmi
snd_hda_codec_cirrus snd_hda_intel snd_hda_codec snd_usb_audio
snd_usbmidi_lib drm_kms_helper snd_hwdep snd_pcm btusb drm bluetooth
snd_page_alloc snd_seq_midi snd_seq_midi_event crc32_pclmul snd_rawmidi
ghash_clmulni_intel snd_seq aesni_intel ssb aes_x86_64 lrw gf128mul
glue_helper ablk_helper snd_seq_device cryptd snd_timer snd applesmc
mei_me hid_roccat_koneplus mei input_polldev hid_roccat joydev
hid_roccat_common hid_appleir microcode apple_gmux shpchp soundcore bcma
i2c_algo_bit lp apple_bl parport video lpc_ich mac_hid hid_generic tg3
firewire_ohci usbhid firewire_core ptp hid sdhci_pci sdhci crc_itu_t
pps_core
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212207] CPU: 0 PID:
2506 Comm: syndaemon Not tainted 3.10.0-custom-step5 #6
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212247] Hardware
name: Apple Inc. Macmini5,1/Mac-8ED6AF5B48C039E1, BIOS
MM51.88Z.0077.B10.1201241549 01/24/2012
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212303] task:
ffff88021e128000 ti: ffff88021e338000 task.ti: ffff88021e338000
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212343] RIP:
0010:[<ffffffff8105cb16>] [<ffffffff8105cb16>] do_exit+0x2e6/0xa30
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212389] RSP:
0018:ffff88021e339ec8 EFLAGS: 00010246
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212419] RAX:
0000000000000000 RBX: ffff88021e128000 RCX: 00000000000000b6
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212458] RDX:
00000000000000b6 RSI: 0000000000000001 RDI: 0000000000000001
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212496] RBP:
ffff88021e339f38 R08: ffffffff81edc800 R09: 0000000000000001
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212534] R10:
0000000000000000 R11: ffffea0008798840 R12: ffff880253789a40
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212573] R13:
ffff88021e128630 R14: ffff880253789aa8 R15: 00007fff52b704f8
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212612] FS:
0000000000000000(0000) GS:ffff88026fa00000(0000) knlGS:0000000000000000
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212655] CS: 0010 DS:
0000 ES: 0000 CR0: 0000000080050033
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212686] CR2:
0000000000000048 CR3: 0000000001c0e000 CR4: 00000000000407f0
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212725] Stack:
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212738]
ffff88021e128634 0000000101bec410 ffff88021e339f00 ffffffff8108f679
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212788]
0000000000000246 00007f7cb316e848 00007f7cb3173e80 ffff88021e339f18
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212836]
0000000000000246 ffff88026436d500 0000000000000100 ffff88021e128000
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212884] Call Trace:
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212904]
[<ffffffff8108f679>] ? vtime_account_user+0x69/0x80
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212939]
[<ffffffff8105d2df>] do_group_exit+0x3f/0xa0
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.212971]
[<ffffffff8105d354>] SyS_exit_group+0x14/0x20
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.213006]
[<ffffffff816d7d2f>] tracesys+0xe1/0xe6
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.213034] Code: ff 48
89 df e8 5c d1 0c 00 be 01 00 00 00 48 89 df e8 9f f5 06 00 44 8b 4d 9c
45 85 c9 0f 85 8b 04 00 00 48 8b 43 08 48 8b 40 08 <48> 8b 78 48 e8 31
dc 05 00 48 89 df e8 a9 f3 3e 00 48 89 df e8
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.213289] RIP
[<ffffffff8105cb16>] do_exit+0x2e6/0xa30
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.213324] RSP
<ffff88021e339ec8>
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.213344] CR2:
0000000000000048
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.226977] ---[ end
trace 79422433cc8a77d4 ]---
Jan 26 00:56:29 gerrit-testing-1404 kernel: [ 180.226986] Fixing
recursive fault but reboot is needed!
^ permalink raw reply
* Re: [PATCH v2] HID: i2c-hid: add runtime PM support
From: Benjamin Tissoires @ 2014-01-29 19:48 UTC (permalink / raw)
To: Mika Westerberg
Cc: linux-input, Jiri Kosina, Benjamin Tissoires,
linux-kernel@vger.kernel.org
In-Reply-To: <1390987476-1905-1-git-send-email-mika.westerberg@linux.intel.com>
On Wed, Jan 29, 2014 at 4:24 AM, Mika Westerberg
<mika.westerberg@linux.intel.com> wrote:
> This patch adds runtime PM support for the HID over I2C driver. When the
> i2c-hid device is first opened we power it on and on the last close we
> power it off. This is actually what the driver is already doing but in
> addition it allows subsystems, like ACPI power domain to power off the
> device during runtime PM suspend, which should save even more power.
>
> The implementation is not the most power efficient because it needs some
> interaction from the userspace (e.g close the device node whenever we are
> no more interested in getting events), nevertheless it allows us to save
> some power and works with devices that are not wake capable.
>
> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
> ---
> v2:
> - Update changelog to mention that ACPI power domain for example can
> power off the device on suspend.
> - Make i2c_hid_power to just call RPM get/put
>
Alright, tested this v2, and it also works flawlessly.
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Thanks Mika!
Cheers,
Benjamin
> drivers/hid/i2c-hid/i2c-hid.c | 68 ++++++++++++++++++++++++++++++++++++-------
> 1 file changed, 57 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/hid/i2c-hid/i2c-hid.c b/drivers/hid/i2c-hid/i2c-hid.c
> index d1f81f52481a..923ff818a1bf 100644
> --- a/drivers/hid/i2c-hid/i2c-hid.c
> +++ b/drivers/hid/i2c-hid/i2c-hid.c
> @@ -25,6 +25,7 @@
> #include <linux/delay.h>
> #include <linux/slab.h>
> #include <linux/pm.h>
> +#include <linux/pm_runtime.h>
> #include <linux/device.h>
> #include <linux/wait.h>
> #include <linux/err.h>
> @@ -454,10 +455,18 @@ static void i2c_hid_init_reports(struct hid_device *hid)
> return;
> }
>
> + /*
> + * The device must be powered on while we fetch initial reports
> + * from it.
> + */
> + pm_runtime_get_sync(&client->dev);
> +
> list_for_each_entry(report,
> &hid->report_enum[HID_FEATURE_REPORT].report_list, list)
> i2c_hid_init_report(report, inbuf, ihid->bufsize);
>
> + pm_runtime_put(&client->dev);
> +
> kfree(inbuf);
> }
>
> @@ -703,8 +712,8 @@ static int i2c_hid_open(struct hid_device *hid)
>
> mutex_lock(&i2c_hid_open_mut);
> if (!hid->open++) {
> - ret = i2c_hid_set_power(client, I2C_HID_PWR_ON);
> - if (ret) {
> + ret = pm_runtime_get_sync(&client->dev);
> + if (ret < 0) {
> hid->open--;
> goto done;
> }
> @@ -712,7 +721,7 @@ static int i2c_hid_open(struct hid_device *hid)
> }
> done:
> mutex_unlock(&i2c_hid_open_mut);
> - return ret;
> + return ret < 0 ? ret : 0;
> }
>
> static void i2c_hid_close(struct hid_device *hid)
> @@ -729,7 +738,7 @@ static void i2c_hid_close(struct hid_device *hid)
> clear_bit(I2C_HID_STARTED, &ihid->flags);
>
> /* Save some power */
> - i2c_hid_set_power(client, I2C_HID_PWR_SLEEP);
> + pm_runtime_put(&client->dev);
> }
> mutex_unlock(&i2c_hid_open_mut);
> }
> @@ -738,19 +747,18 @@ static int i2c_hid_power(struct hid_device *hid, int lvl)
> {
> struct i2c_client *client = hid->driver_data;
> struct i2c_hid *ihid = i2c_get_clientdata(client);
> - int ret = 0;
>
> i2c_hid_dbg(ihid, "%s lvl:%d\n", __func__, lvl);
>
> switch (lvl) {
> case PM_HINT_FULLON:
> - ret = i2c_hid_set_power(client, I2C_HID_PWR_ON);
> + pm_runtime_get_sync(&client->dev);
> break;
> case PM_HINT_NORMAL:
> - ret = i2c_hid_set_power(client, I2C_HID_PWR_SLEEP);
> + pm_runtime_put(&client->dev);
> break;
> }
> - return ret;
> + return 0;
> }
>
> static struct hid_ll_driver i2c_hid_ll_driver = {
> @@ -973,13 +981,17 @@ static int i2c_hid_probe(struct i2c_client *client,
> if (ret < 0)
> goto err;
>
> + pm_runtime_get_noresume(&client->dev);
> + pm_runtime_set_active(&client->dev);
> + pm_runtime_enable(&client->dev);
> +
> ret = i2c_hid_fetch_hid_descriptor(ihid);
> if (ret < 0)
> - goto err;
> + goto err_pm;
>
> ret = i2c_hid_init_irq(client);
> if (ret < 0)
> - goto err;
> + goto err_pm;
>
> hid = hid_allocate_device();
> if (IS_ERR(hid)) {
> @@ -1010,6 +1022,7 @@ static int i2c_hid_probe(struct i2c_client *client,
> goto err_mem_free;
> }
>
> + pm_runtime_put(&client->dev);
> return 0;
>
> err_mem_free:
> @@ -1018,6 +1031,10 @@ err_mem_free:
> err_irq:
> free_irq(client->irq, ihid);
>
> +err_pm:
> + pm_runtime_put_noidle(&client->dev);
> + pm_runtime_disable(&client->dev);
> +
> err:
> i2c_hid_free_buffers(ihid);
> kfree(ihid);
> @@ -1029,6 +1046,11 @@ static int i2c_hid_remove(struct i2c_client *client)
> struct i2c_hid *ihid = i2c_get_clientdata(client);
> struct hid_device *hid;
>
> + pm_runtime_get_sync(&client->dev);
> + pm_runtime_disable(&client->dev);
> + pm_runtime_set_suspended(&client->dev);
> + pm_runtime_put_noidle(&client->dev);
> +
> hid = ihid->hid;
> hid_destroy_device(hid);
>
> @@ -1074,7 +1096,31 @@ static int i2c_hid_resume(struct device *dev)
> }
> #endif
>
> -static SIMPLE_DEV_PM_OPS(i2c_hid_pm, i2c_hid_suspend, i2c_hid_resume);
> +#ifdef CONFIG_PM_RUNTIME
> +static int i2c_hid_runtime_suspend(struct device *dev)
> +{
> + struct i2c_client *client = to_i2c_client(dev);
> +
> + i2c_hid_set_power(client, I2C_HID_PWR_SLEEP);
> + disable_irq(client->irq);
> + return 0;
> +}
> +
> +static int i2c_hid_runtime_resume(struct device *dev)
> +{
> + struct i2c_client *client = to_i2c_client(dev);
> +
> + enable_irq(client->irq);
> + i2c_hid_set_power(client, I2C_HID_PWR_ON);
> + return 0;
> +}
> +#endif
> +
> +static const struct dev_pm_ops i2c_hid_pm = {
> + SET_SYSTEM_SLEEP_PM_OPS(i2c_hid_suspend, i2c_hid_resume)
> + SET_RUNTIME_PM_OPS(i2c_hid_runtime_suspend, i2c_hid_runtime_resume,
> + NULL)
> +};
>
> static const struct i2c_device_id i2c_hid_id_table[] = {
> { "hid", 0 },
> --
> 1.8.5.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply
* Re: [PATCH 0/5] HID logitech DJ fixes and preps for enabling extended features
From: Benjamin Tissoires @ 2014-01-29 18:42 UTC (permalink / raw)
To: Andrew de los Reyes
Cc: Benjamin Tissoires, Andrew de los Reyes, Jiri Kosina,
Nestor Lopez Casado, Linux Input, linux-kernel@vger.kernel.org
In-Reply-To: <CAAfQ=8_r2Pc34qXhU874qV=38dk_gAEaji+mgjRY2BELBCb7Zw@mail.gmail.com>
Hi Andrew,
On Wed, Jan 29, 2014 at 1:21 PM, Andrew de los Reyes <adlr@chromium.org> wrote:
> Just curious, what is the status of these patches?
Currently, Jiri had taken only the USB3 fix. The rest is still under
review/testing.
>
> Benjamin, should I rebase Chrome OS's Logitech patches on top of these
> and look at sending them upstream as well?
I would say wait a little bit more :)
I received the testing devices 2 weeks ago, and I managed to get the
Wireless Touchpad, T650, T651 and TK820 working with them.
I still don't know the fate regarding the touch mice.
I put a WIP on my github repo here (these are not the final patches though):
https://github.com/bentiss/hid-logitech-dj/tree/for-whot (branch for-whot).
Still, I need to rework on the patch 5/5 of this series, because it's
not working with bluetooth devices. I will also have to check if I can
use David's latest patches regarding the transport layer.
So until it has been accepted upstream by Jiri, do not consider this
better than what you have in ChromeOS, it may still change, and you
will have to redo the work again and again :)
Cheers,
Benjamin
>
> On Thu, Jan 9, 2014 at 1:22 PM, Benjamin Tissoires
> <benjamin.tissoires@redhat.com> wrote:
>> On 09/01/14 16:08, Andrew de los Reyes wrote:
>>> In general, I'm positive on the change to fix the USB3 issue (yay!),
>>> and for the others I'm happy it's going upstream. It seem to open up
>>> the possibility of user-space drivers, which is great, even though we
>>> don't need this on our team.
>>>
>>> One thing I want to double-check: on some devices (T651, at least),
>>> the raw data comes in not via HID++, but tacked onto the end of the
>>> normal mouse reports. Will a driver for this device be able to get all
>>> packets, not just HID++ ones? Sorry if this was clear and I missed it.
>>
>> Yeah, that is partly why I can not send the rest of the series right
>> now. Nestor already warned me about those funny devices, so I need to
>> double check how to implement HID++.
>>
>> On a technical point of view, a driver connected through the unifying
>> receiver currently only get the regular input reports, and this series
>> adds the HID++ reports to these ones. So yes, a device will receive all
>> reports dedicated to it.
>>
>> Cheers,
>> Benjamin
>>
>>>
>>> -andrew
>>>
>>> On Wed, Jan 8, 2014 at 2:18 PM, Benjamin Tissoires
>>> <benjamin.tissoires@redhat.com> wrote:
>>>> Hi Jiri,
>>>>
>>>> Well, this work is _not_ for 3.14 (except maybe patch 1), especially since it is
>>>> missing the biggest part where we enable the capabilities of Logitech devices.
>>>>
>>>> Long story short:
>>>> This work is based on the work I did back in Summer 2011. I worked at Logitech
>>>> for a few weeks to show up a demo of a driver for the Logitech Wireless Touchpad.
>>>> At that time, a first draft has been done, but due to a lack of resources, noone
>>>> upstreamed it.
>>>> Since then, the code marinated a little at Logitech and in the ChromeOS kernel
>>>> tree, but nobody tried to push it upstream. So here I am, trying to push this stuff
>>>> upstream.
>>>>
>>>> I can not send the full series right now because I am lacking most of the
>>>> testing hardware (I mean I only have the oldest Wireless Touchpad).
>>>> Hopefully, I should receive some other soon, and I'll be able to send the second
>>>> part then.
>>>>
>>>> Now, let me roughly explain the patches:
>>>> - patch 1 can be applied right now I think, but it's entirely up to you Jiri.
>>>> This patch should fix the missing notifications with some USB 3.0 boards.
>>>> - patches 2 to 5 allows to forward in both direction the proprietary protocol
>>>> used by Logitech (HID++ [1]) between the driver and the hardware.
>>>> - later patches will introduce a transport layer for HID++ and also a driver
>>>> to support full multitouch on various Logitech touchpads.
>>>>
>>>> Nestor, Andrew, feel free to add your "Signed-off-by" whereever you want, I lost
>>>> a little bit the track of who added what.
>>>>
>>>> Cheers,
>>>> Benjamin
>>>>
>>>> [1] HID++: Documentation is provided at
>>>> https://drive.google.com/a/logitech.com/?tab=mo#folders/0BxbRzx7vEV7eWmgwazJ3NUFfQ28
>>>>
>>>> Benjamin Tisssoires (5):
>>>> HID: logitech-dj: Fix USB 3.0 issue
>>>> HID: core: do not scan reports if the group is already set
>>>> HID: logitech-dj: rely on hid groups to separate receivers from dj
>>>> devices
>>>> HID: logitech-dj: forward incoming HID++ reports to the correct dj
>>>> device
>>>> HID: logitech-dj: add .request callback
>>>>
>>>> drivers/hid/hid-core.c | 3 +-
>>>> drivers/hid/hid-logitech-dj.c | 161 +++++++++++++++++++++++++++++++++---------
>>>> drivers/hid/hid-logitech-dj.h | 16 ++---
>>>> include/linux/hid.h | 1 +
>>>> 4 files changed, 136 insertions(+), 45 deletions(-)
>>>>
>>>> --
>>>> 1.8.4.2
>>>>
>>>> --
>>>> To unsubscribe from this list: send the line "unsubscribe linux-input" in
>>>> the body of a message to majordomo@vger.kernel.org
>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
^ permalink raw reply
* Re: [PATCH 0/5] HID logitech DJ fixes and preps for enabling extended features
From: Andrew de los Reyes @ 2014-01-29 18:21 UTC (permalink / raw)
To: Benjamin Tissoires
Cc: Andrew de los Reyes, Benjamin Tissoires, Jiri Kosina,
Nestor Lopez Casado, Linux Input, linux-kernel
In-Reply-To: <52CF1327.3090705@redhat.com>
Just curious, what is the status of these patches?
Benjamin, should I rebase Chrome OS's Logitech patches on top of these
and look at sending them upstream as well?
On Thu, Jan 9, 2014 at 1:22 PM, Benjamin Tissoires
<benjamin.tissoires@redhat.com> wrote:
> On 09/01/14 16:08, Andrew de los Reyes wrote:
>> In general, I'm positive on the change to fix the USB3 issue (yay!),
>> and for the others I'm happy it's going upstream. It seem to open up
>> the possibility of user-space drivers, which is great, even though we
>> don't need this on our team.
>>
>> One thing I want to double-check: on some devices (T651, at least),
>> the raw data comes in not via HID++, but tacked onto the end of the
>> normal mouse reports. Will a driver for this device be able to get all
>> packets, not just HID++ ones? Sorry if this was clear and I missed it.
>
> Yeah, that is partly why I can not send the rest of the series right
> now. Nestor already warned me about those funny devices, so I need to
> double check how to implement HID++.
>
> On a technical point of view, a driver connected through the unifying
> receiver currently only get the regular input reports, and this series
> adds the HID++ reports to these ones. So yes, a device will receive all
> reports dedicated to it.
>
> Cheers,
> Benjamin
>
>>
>> -andrew
>>
>> On Wed, Jan 8, 2014 at 2:18 PM, Benjamin Tissoires
>> <benjamin.tissoires@redhat.com> wrote:
>>> Hi Jiri,
>>>
>>> Well, this work is _not_ for 3.14 (except maybe patch 1), especially since it is
>>> missing the biggest part where we enable the capabilities of Logitech devices.
>>>
>>> Long story short:
>>> This work is based on the work I did back in Summer 2011. I worked at Logitech
>>> for a few weeks to show up a demo of a driver for the Logitech Wireless Touchpad.
>>> At that time, a first draft has been done, but due to a lack of resources, noone
>>> upstreamed it.
>>> Since then, the code marinated a little at Logitech and in the ChromeOS kernel
>>> tree, but nobody tried to push it upstream. So here I am, trying to push this stuff
>>> upstream.
>>>
>>> I can not send the full series right now because I am lacking most of the
>>> testing hardware (I mean I only have the oldest Wireless Touchpad).
>>> Hopefully, I should receive some other soon, and I'll be able to send the second
>>> part then.
>>>
>>> Now, let me roughly explain the patches:
>>> - patch 1 can be applied right now I think, but it's entirely up to you Jiri.
>>> This patch should fix the missing notifications with some USB 3.0 boards.
>>> - patches 2 to 5 allows to forward in both direction the proprietary protocol
>>> used by Logitech (HID++ [1]) between the driver and the hardware.
>>> - later patches will introduce a transport layer for HID++ and also a driver
>>> to support full multitouch on various Logitech touchpads.
>>>
>>> Nestor, Andrew, feel free to add your "Signed-off-by" whereever you want, I lost
>>> a little bit the track of who added what.
>>>
>>> Cheers,
>>> Benjamin
>>>
>>> [1] HID++: Documentation is provided at
>>> https://drive.google.com/a/logitech.com/?tab=mo#folders/0BxbRzx7vEV7eWmgwazJ3NUFfQ28
>>>
>>> Benjamin Tisssoires (5):
>>> HID: logitech-dj: Fix USB 3.0 issue
>>> HID: core: do not scan reports if the group is already set
>>> HID: logitech-dj: rely on hid groups to separate receivers from dj
>>> devices
>>> HID: logitech-dj: forward incoming HID++ reports to the correct dj
>>> device
>>> HID: logitech-dj: add .request callback
>>>
>>> drivers/hid/hid-core.c | 3 +-
>>> drivers/hid/hid-logitech-dj.c | 161 +++++++++++++++++++++++++++++++++---------
>>> drivers/hid/hid-logitech-dj.h | 16 ++---
>>> include/linux/hid.h | 1 +
>>> 4 files changed, 136 insertions(+), 45 deletions(-)
>>>
>>> --
>>> 1.8.4.2
>>>
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-input" in
>>> the body of a message to majordomo@vger.kernel.org
>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply
* Hi
From: l7swab4hvf @ 2014-01-29 18:08 UTC (permalink / raw)
To: l7swab4hvf
Diploma?
http://is.gd/GzXAtf
^ permalink raw reply
* Re: [PATCH 7/7] HID: sony: Prevent devices from being connected twice
From: David Herrmann @ 2014-01-29 17:42 UTC (permalink / raw)
To: Frank Praznik; +Cc: open list:HID CORE LAYER, Jiri Kosina
In-Reply-To: <1391016797-12842-8-git-send-email-frank.praznik@oh.rr.com>
Hi
On Wed, Jan 29, 2014 at 6:33 PM, Frank Praznik <frank.praznik@oh.rr.com> wrote:
> Prevent one controller from being connected twice and showing up as two devices
> if a USB cable is plugged into the controller when it is already connected via
> Bluetooth.
>
> A global list of connected devices is maintained and newly connected controllers
> are checked against this list. If it is found to already be present, the probe
> function exits with an return value of EEXIST.
>
> The MAC address of the Dualshock 4 is used as an identifier to track connected
> controllers. It is retrieved with feature report 0x81 when connected via USB and
> via the UNIQ identifier on a Bluetooth connection.
>
> Signed-off-by: Frank Praznik <frank.praznik@oh.rr.com>
>
> ---
> drivers/hid/hid-sony.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 105 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
> index e478265..a24d021 100644
> --- a/drivers/hid/hid-sony.c
> +++ b/drivers/hid/hid-sony.c
> @@ -710,8 +710,12 @@ static enum power_supply_property sony_battery_props[] = {
> POWER_SUPPLY_PROP_STATUS,
> };
>
> +static spinlock_t sony_dev_list_lock;
> +static LIST_HEAD(sony_device_list);
> +
> struct sony_sc {
> spinlock_t lock;
> + struct list_head device_list;
> struct hid_device *hdev;
> struct led_classdev *leds[MAX_LEDS];
> unsigned long quirks;
> @@ -723,6 +727,7 @@ struct sony_sc {
> __u8 right;
> #endif
>
> + __u8 mac_address[6];
> __u8 cable_state;
> __u8 battery_charging;
> __u8 battery_capacity;
> @@ -1471,6 +1476,94 @@ static int sony_register_touchpad(struct sony_sc *sc, int touch_count,
> return 0;
> }
>
> +/* If a controller is plugged in via USB while already connected via Bluetooth
> + * it will show up as two devices. A global list of connected controllers and
> + * their MAC addresses is maintained to ensure that a device is only connected
> + * once.
> + */
> +static int sony_check_add_dev_list(struct sony_sc *sc)
> +{
> + struct sony_sc *entry;
> + struct list_head *pos;
> + unsigned long flags;
> + int ret;
> +
> + spin_lock_irqsave(&sony_dev_list_lock, flags);
> +
> + list_for_each(pos, &sony_device_list) {
> + entry = list_entry(pos, struct sony_sc, device_list);
> + ret = memcmp(sc->mac_address, entry->mac_address,
> + FIELD_SIZEOF(struct sony_sc, mac_address));
> + if (!ret) {
> + hid_info(sc->hdev, "Controller already connected\n");
> + return -EEXIST;
> + }
> + }
> +
> + list_add(&(sc->device_list), &sony_device_list);
> +
> + spin_unlock_irqrestore(&sony_dev_list_lock, flags);
> +
> + return 0;
> +}
> +
> +static void sony_remove_dev_list(struct sony_sc *sc)
> +{
> + unsigned long flags;
> +
> + spin_lock_irqsave(&sony_dev_list_lock, flags);
> + list_del(&(sc->device_list));
> + spin_unlock_irqrestore(&sony_dev_list_lock, flags);
> +}
> +
> +static int dualshock4_check_add(struct sony_sc *sc)
> +{
> + int ret;
> +
> + if (sc->quirks & DUALSHOCK4_CONTROLLER_BT) {
> + int n;
> + unsigned int mac_addr[6];
> +
> + /* HIDP stores the device MAC address in the uniq member */
> + ret = strlen(sc->hdev->uniq);
> + if (ret != 17) {
> + hid_err(sc->hdev, "Malformed controller MAC address\n");
> + return -EINVAL;
> + }
> +
> + ret = sscanf(sc->hdev->uniq, "%02x:%02x:%02x:%02x:%02x:%02x",
> + &mac_addr[5], &mac_addr[4], &mac_addr[3], &mac_addr[2],
> + &mac_addr[1], &mac_addr[0]);
Don't do this. UNIQ is a way to provide unique identifiers for
devices, but it's not guaranteed to stay the same.
Is it not possible to use the same FEATURE_REPORT as with USB?
Thanks
David
> +
> + if (ret != 6) {
> + hid_err(sc->hdev, "Error parsing controller MAC address\n");
> + return -EINVAL;
> + }
> +
> + for (n = 5; n >= 0; n--)
> + sc->mac_address[n] = (__u8)mac_addr[n];
> + } else {
> + __u8 buf[7];
> +
> + /* The MAC address of a DS4 controller connected via USB can be
> + * retrieved with feature report 0x81.
> + */
> + ret = sc->hdev->ll_driver->raw_request(sc->hdev, 0x81,
> + buf, sizeof(buf), HID_FEATURE_REPORT,
> + HID_REQ_GET_REPORT);
> +
> + if (ret != 7) {
> + hid_err(sc->hdev, "Error retrieving with controller MAC address\n");
> + return ret;
> + }
> +
> + memcpy(sc->mac_address, &buf[1], sizeof(sc->mac_address));
> + }
> +
> + ret = sony_check_add_dev_list(sc);
> + return ret;
> +}
> +
> static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
> {
> int ret;
> @@ -1515,8 +1608,13 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
> else if (sc->quirks & SIXAXIS_CONTROLLER_BT)
> ret = sixaxis_set_operational_bt(hdev);
> else if ((sc->quirks & DUALSHOCK4_CONTROLLER_USB) ||
> - (sc->quirks & DUALSHOCK4_CONTROLLER_BT)) {
> - /* The Dualshock 4 touchpad supports 2 touches and has a
> + (sc->quirks & DUALSHOCK4_CONTROLLER_BT)) {
> +
> + ret = dualshock4_check_add(sc);
> + if (ret)
> + goto err_stop;
> +
> + /* The Dualshock 4 touchpad supports 2 touches and has a
> * resolution of 1920x940.
> */
> ret = sony_register_touchpad(sc, 2, 1920, 940);
> @@ -1580,6 +1678,11 @@ static void sony_remove(struct hid_device *hdev)
>
> sony_destroy_ff(hdev);
>
> + if ((sc->quirks & DUALSHOCK4_CONTROLLER_USB) ||
> + (sc->quirks & DUALSHOCK4_CONTROLLER_BT)) {
> + sony_remove_dev_list(sc);
> + }
> +
> hid_hw_stop(hdev);
> }
>
> --
> 1.8.5.3
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-input" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: [PATCH 1/7] HID: sony: Change dualshock4_state_worker to use the low-level transport driver function
From: David Herrmann @ 2014-01-29 17:39 UTC (permalink / raw)
To: Frank Praznik; +Cc: open list:HID CORE LAYER, Jiri Kosina
In-Reply-To: <1391016797-12842-2-git-send-email-frank.praznik@oh.rr.com>
Hi
On Wed, Jan 29, 2014 at 6:33 PM, Frank Praznik <frank.praznik@oh.rr.com> wrote:
> Use the new low-level transport driver functions to send the output reports to
> the controller.
>
> Remove sony_set_output_report since it is no longer used.
>
> Signed-off-by: Frank Praznik <frank.praznik@oh.rr.com>
>
> ---
> drivers/hid/hid-sony.c | 56 +++++++++++++-------------------------------------
> 1 file changed, 14 insertions(+), 42 deletions(-)
>
> diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
> index 2bd3f13..a3cefdec 100644
> --- a/drivers/hid/hid-sony.c
> +++ b/drivers/hid/hid-sony.c
> @@ -502,7 +502,6 @@ struct sony_sc {
> spinlock_t lock;
> struct hid_device *hdev;
> struct led_classdev *leds[MAX_LEDS];
> - struct hid_report *output_report;
> unsigned long quirks;
> struct work_struct state_worker;
> struct power_supply battery;
> @@ -1053,21 +1052,26 @@ static void dualshock4_state_worker(struct work_struct *work)
> {
> struct sony_sc *sc = container_of(work, struct sony_sc, state_worker);
> struct hid_device *hdev = sc->hdev;
> - struct hid_report *report = sc->output_report;
> - __s32 *value = report->field[0]->value;
> + int offset;
> +
> + __u8 buf[32] = { 0 };
>
> - value[0] = 0x03;
> + buf[0] = 0x05;
> + buf[1] = 0x03;
> + offset = 4;
>
> #ifdef CONFIG_SONY_FF
> - value[3] = sc->right;
> - value[4] = sc->left;
> + buf[offset++] = sc->right;
> + buf[offset++] = sc->left;
> +#else
> + offset += 2;
> #endif
>
> - value[5] = sc->led_state[0];
> - value[6] = sc->led_state[1];
> - value[7] = sc->led_state[2];
> + buf[offset++] = sc->led_state[0];
> + buf[offset++] = sc->led_state[1];
> + buf[offset++] = sc->led_state[2];
>
> - hid_hw_request(hdev, report, HID_REQ_SET_REPORT);
> + hdev->ll_driver->output_report(hdev, buf, sizeof(buf));
You should check that "output_report" is non-NULL. Feel free to do
that in ->probe(). Not all transport-drivers currently implement it
and we allow user-space to rebind drivers via sysfs.
Thanks
David
> }
>
> #ifdef CONFIG_SONY_FF
> @@ -1200,33 +1204,6 @@ static void sony_battery_remove(struct sony_sc *sc)
> sc->battery.name = NULL;
> }
>
> -static int sony_set_output_report(struct sony_sc *sc, int req_id, int req_size)
> -{
> - struct list_head *head, *list;
> - struct hid_report *report;
> - struct hid_device *hdev = sc->hdev;
> -
> - list = &hdev->report_enum[HID_OUTPUT_REPORT].report_list;
> -
> - list_for_each(head, list) {
> - report = list_entry(head, struct hid_report, list);
> -
> - if (report->id == req_id) {
> - if (report->size < req_size) {
> - hid_err(hdev, "Output report 0x%02x (%i bits) is smaller than requested size (%i bits)\n",
> - req_id, report->size, req_size);
> - return -EINVAL;
> - }
> - sc->output_report = report;
> - return 0;
> - }
> - }
> -
> - hid_err(hdev, "Unable to locate output report 0x%02x\n", req_id);
> -
> - return -EINVAL;
> -}
> -
> static int sony_register_touchpad(struct sony_sc *sc, int touch_count,
> int w, int h)
> {
> @@ -1291,11 +1268,6 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
> else if (sc->quirks & SIXAXIS_CONTROLLER_BT)
> ret = sixaxis_set_operational_bt(hdev);
> else if (sc->quirks & DUALSHOCK4_CONTROLLER_USB) {
> - /* Report 5 (31 bytes) is used to send data to the controller via USB */
> - ret = sony_set_output_report(sc, 0x05, 248);
> - if (ret < 0)
> - goto err_stop;
> -
> /* The Dualshock 4 touchpad supports 2 touches and has a
> * resolution of 1920x940.
> */
> --
> 1.8.5.3
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-input" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* [PATCH 6/7] HID: sony: Add conditionals to enable LED, rumble, battery and touchpad support on the Dualshock 4.
From: Frank Praznik @ 2014-01-29 17:33 UTC (permalink / raw)
To: linux-input; +Cc: jkosina, Frank Praznik
In-Reply-To: <1391016797-12842-1-git-send-email-frank.praznik@oh.rr.com>
Add the necessary conditionals to enable LED, rumble, battery and touchpad
support on the Dualshock 4 when connected via Bluetooth.
Signed-off-by: Frank Praznik <frank.praznik@oh.rr.com>
---
drivers/hid/hid-sony.c | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
index cee752f..b40a2e6 100644
--- a/drivers/hid/hid-sony.c
+++ b/drivers/hid/hid-sony.c
@@ -44,8 +44,10 @@
#define DUALSHOCK4_CONTROLLER_USB BIT(5)
#define DUALSHOCK4_CONTROLLER_BT BIT(6)
-#define SONY_LED_SUPPORT (SIXAXIS_CONTROLLER_USB | BUZZ_CONTROLLER | DUALSHOCK4_CONTROLLER_USB)
-#define SONY_BATTERY_SUPPORT (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT | DUALSHOCK4_CONTROLLER_USB)
+#define SONY_LED_SUPPORT (SIXAXIS_CONTROLLER_USB | BUZZ_CONTROLLER | \
+ DUALSHOCK4_CONTROLLER_USB | DUALSHOCK4_CONTROLLER_BT)
+#define SONY_BATTERY_SUPPORT (SIXAXIS_CONTROLLER_USB | SIXAXIS_CONTROLLER_BT | \
+ DUALSHOCK4_CONTROLLER_USB | DUALSHOCK4_CONTROLLER_BT)
#define MAX_LEDS 4
@@ -939,8 +941,9 @@ static int sony_raw_event(struct hid_device *hdev, struct hid_report *report,
swap(rd[47], rd[48]);
sixaxis_parse_report(sc, rd, size);
- } else if ((sc->quirks & DUALSHOCK4_CONTROLLER_USB) && rd[0] == 0x01 &&
- size == 64) {
+ } else if (((sc->quirks & DUALSHOCK4_CONTROLLER_USB) && rd[0] == 0x01 &&
+ size == 64) || ((sc->quirks & DUALSHOCK4_CONTROLLER_BT)
+ && rd[0] == 0x11 && size == 78)) {
dualshock4_parse_report(sc, rd, size);
}
@@ -1079,7 +1082,8 @@ static void sony_set_leds(struct hid_device *hdev, const __u8 *leds, int count)
if (drv_data->quirks & BUZZ_CONTROLLER && count == 4) {
buzz_set_leds(hdev, leds);
} else if ((drv_data->quirks & SIXAXIS_CONTROLLER_USB) ||
- (drv_data->quirks & DUALSHOCK4_CONTROLLER_USB)) {
+ (drv_data->quirks & DUALSHOCK4_CONTROLLER_USB) ||
+ (drv_data->quirks & DUALSHOCK4_CONTROLLER_BT)) {
for (n = 0; n < count; n++)
drv_data->led_state[n] = leds[n];
schedule_work(&drv_data->state_worker);
@@ -1184,7 +1188,8 @@ static int sony_leds_init(struct hid_device *hdev)
/* Validate expected report characteristics. */
if (!hid_validate_values(hdev, HID_OUTPUT_REPORT, 0, 0, 7))
return -ENODEV;
- } else if (drv_data->quirks & DUALSHOCK4_CONTROLLER_USB) {
+ } else if ((drv_data->quirks & DUALSHOCK4_CONTROLLER_USB) ||
+ (drv_data->quirks & DUALSHOCK4_CONTROLLER_BT)) {
drv_data->led_count = 3;
max_brightness = 255;
use_colors = 1;
@@ -1509,7 +1514,8 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
}
else if (sc->quirks & SIXAXIS_CONTROLLER_BT)
ret = sixaxis_set_operational_bt(hdev);
- else if (sc->quirks & DUALSHOCK4_CONTROLLER_USB) {
+ else if ((sc->quirks & DUALSHOCK4_CONTROLLER_USB) ||
+ (sc->quirks & DUALSHOCK4_CONTROLLER_BT)) {
/* The Dualshock 4 touchpad supports 2 touches and has a
* resolution of 1920x940.
*/
--
1.8.5.3
^ permalink raw reply related
* [PATCH 7/7] HID: sony: Prevent devices from being connected twice
From: Frank Praznik @ 2014-01-29 17:33 UTC (permalink / raw)
To: linux-input; +Cc: jkosina, Frank Praznik
In-Reply-To: <1391016797-12842-1-git-send-email-frank.praznik@oh.rr.com>
Prevent one controller from being connected twice and showing up as two devices
if a USB cable is plugged into the controller when it is already connected via
Bluetooth.
A global list of connected devices is maintained and newly connected controllers
are checked against this list. If it is found to already be present, the probe
function exits with an return value of EEXIST.
The MAC address of the Dualshock 4 is used as an identifier to track connected
controllers. It is retrieved with feature report 0x81 when connected via USB and
via the UNIQ identifier on a Bluetooth connection.
Signed-off-by: Frank Praznik <frank.praznik@oh.rr.com>
---
drivers/hid/hid-sony.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 105 insertions(+), 2 deletions(-)
diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
index e478265..a24d021 100644
--- a/drivers/hid/hid-sony.c
+++ b/drivers/hid/hid-sony.c
@@ -710,8 +710,12 @@ static enum power_supply_property sony_battery_props[] = {
POWER_SUPPLY_PROP_STATUS,
};
+static spinlock_t sony_dev_list_lock;
+static LIST_HEAD(sony_device_list);
+
struct sony_sc {
spinlock_t lock;
+ struct list_head device_list;
struct hid_device *hdev;
struct led_classdev *leds[MAX_LEDS];
unsigned long quirks;
@@ -723,6 +727,7 @@ struct sony_sc {
__u8 right;
#endif
+ __u8 mac_address[6];
__u8 cable_state;
__u8 battery_charging;
__u8 battery_capacity;
@@ -1471,6 +1476,94 @@ static int sony_register_touchpad(struct sony_sc *sc, int touch_count,
return 0;
}
+/* If a controller is plugged in via USB while already connected via Bluetooth
+ * it will show up as two devices. A global list of connected controllers and
+ * their MAC addresses is maintained to ensure that a device is only connected
+ * once.
+ */
+static int sony_check_add_dev_list(struct sony_sc *sc)
+{
+ struct sony_sc *entry;
+ struct list_head *pos;
+ unsigned long flags;
+ int ret;
+
+ spin_lock_irqsave(&sony_dev_list_lock, flags);
+
+ list_for_each(pos, &sony_device_list) {
+ entry = list_entry(pos, struct sony_sc, device_list);
+ ret = memcmp(sc->mac_address, entry->mac_address,
+ FIELD_SIZEOF(struct sony_sc, mac_address));
+ if (!ret) {
+ hid_info(sc->hdev, "Controller already connected\n");
+ return -EEXIST;
+ }
+ }
+
+ list_add(&(sc->device_list), &sony_device_list);
+
+ spin_unlock_irqrestore(&sony_dev_list_lock, flags);
+
+ return 0;
+}
+
+static void sony_remove_dev_list(struct sony_sc *sc)
+{
+ unsigned long flags;
+
+ spin_lock_irqsave(&sony_dev_list_lock, flags);
+ list_del(&(sc->device_list));
+ spin_unlock_irqrestore(&sony_dev_list_lock, flags);
+}
+
+static int dualshock4_check_add(struct sony_sc *sc)
+{
+ int ret;
+
+ if (sc->quirks & DUALSHOCK4_CONTROLLER_BT) {
+ int n;
+ unsigned int mac_addr[6];
+
+ /* HIDP stores the device MAC address in the uniq member */
+ ret = strlen(sc->hdev->uniq);
+ if (ret != 17) {
+ hid_err(sc->hdev, "Malformed controller MAC address\n");
+ return -EINVAL;
+ }
+
+ ret = sscanf(sc->hdev->uniq, "%02x:%02x:%02x:%02x:%02x:%02x",
+ &mac_addr[5], &mac_addr[4], &mac_addr[3], &mac_addr[2],
+ &mac_addr[1], &mac_addr[0]);
+
+ if (ret != 6) {
+ hid_err(sc->hdev, "Error parsing controller MAC address\n");
+ return -EINVAL;
+ }
+
+ for (n = 5; n >= 0; n--)
+ sc->mac_address[n] = (__u8)mac_addr[n];
+ } else {
+ __u8 buf[7];
+
+ /* The MAC address of a DS4 controller connected via USB can be
+ * retrieved with feature report 0x81.
+ */
+ ret = sc->hdev->ll_driver->raw_request(sc->hdev, 0x81,
+ buf, sizeof(buf), HID_FEATURE_REPORT,
+ HID_REQ_GET_REPORT);
+
+ if (ret != 7) {
+ hid_err(sc->hdev, "Error retrieving with controller MAC address\n");
+ return ret;
+ }
+
+ memcpy(sc->mac_address, &buf[1], sizeof(sc->mac_address));
+ }
+
+ ret = sony_check_add_dev_list(sc);
+ return ret;
+}
+
static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
{
int ret;
@@ -1515,8 +1608,13 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
else if (sc->quirks & SIXAXIS_CONTROLLER_BT)
ret = sixaxis_set_operational_bt(hdev);
else if ((sc->quirks & DUALSHOCK4_CONTROLLER_USB) ||
- (sc->quirks & DUALSHOCK4_CONTROLLER_BT)) {
- /* The Dualshock 4 touchpad supports 2 touches and has a
+ (sc->quirks & DUALSHOCK4_CONTROLLER_BT)) {
+
+ ret = dualshock4_check_add(sc);
+ if (ret)
+ goto err_stop;
+
+ /* The Dualshock 4 touchpad supports 2 touches and has a
* resolution of 1920x940.
*/
ret = sony_register_touchpad(sc, 2, 1920, 940);
@@ -1580,6 +1678,11 @@ static void sony_remove(struct hid_device *hdev)
sony_destroy_ff(hdev);
+ if ((sc->quirks & DUALSHOCK4_CONTROLLER_USB) ||
+ (sc->quirks & DUALSHOCK4_CONTROLLER_BT)) {
+ sony_remove_dev_list(sc);
+ }
+
hid_hw_stop(hdev);
}
--
1.8.5.3
^ permalink raw reply related
* [PATCH 4/7] HID: sony: Add offsets and battery calculations for parsing Dualshock 4 reports sent via Bluetooth.
From: Frank Praznik @ 2014-01-29 17:33 UTC (permalink / raw)
To: linux-input; +Cc: jkosina, Frank Praznik
In-Reply-To: <1391016797-12842-1-git-send-email-frank.praznik@oh.rr.com>
The battery and touch data starts at offset 32 instead of 30 in the Bluetooth
reports.
When the controller isn't connected to a power source and the battery is
discharging, the battery level is reported from 0 to 9 instead of 1 to 11.
Signed-off-by: Frank Praznik <frank.praznik@oh.rr.com>
---
drivers/hid/hid-sony.c | 26 +++++++++++++++++++-------
1 file changed, 19 insertions(+), 7 deletions(-)
diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
index b35535e..e243c3d 100644
--- a/drivers/hid/hid-sony.c
+++ b/drivers/hid/hid-sony.c
@@ -861,25 +861,34 @@ static void dualshock4_parse_report(struct sony_sc *sc, __u8 *rd, int size)
struct hid_input, list);
struct input_dev *input_dev = hidinput->input;
unsigned long flags;
- int n, offset = 35;
+ int n, offset;
__u8 cable_state, battery_capacity, battery_charging;
+ /* Battery and touchpad data starts at byte 30 in the USB report and
+ * 32 in Bluetooth report.
+ */
+ offset = (sc->quirks & DUALSHOCK4_CONTROLLER_USB) ? 30 : 32;
+
/* The lower 4 bits of byte 30 contain the battery level
* and the 5th bit contains the USB cable state.
*/
- cable_state = (rd[30] >> 4) & 0x01;
- battery_capacity = rd[30] & 0x0F;
+ cable_state = (rd[offset] >> 4) & 0x01;
+ battery_capacity = rd[offset] & 0x0F;
- /* On USB the Dualshock 4 battery level goes from 0 to 11.
- * A battery level of 11 means fully charged.
+ /* When a USB power source is connected the battery level ranges from
+ * 0 to 11, and when running on battery power it ranges from 0 to 9.
+ * A battery level of 11 means charge completed.
*/
- if (cable_state && battery_capacity == 11)
+ if (!cable_state || battery_capacity == 11)
battery_charging = 0;
else
battery_charging = 1;
+ if (!cable_state)
+ battery_capacity++;
if (battery_capacity > 10)
battery_capacity--;
+
battery_capacity *= 10;
spin_lock_irqsave(&sc->lock, flags);
@@ -888,7 +897,10 @@ static void dualshock4_parse_report(struct sony_sc *sc, __u8 *rd, int size)
sc->battery_charging = battery_charging;
spin_unlock_irqrestore(&sc->lock, flags);
- /* The Dualshock 4 multi-touch trackpad data starts at offset 35 on USB.
+ offset += 5;
+
+ /* The Dualshock 4 multi-touch trackpad data starts at offset 35 on USB
+ * and 37 on Bluetooth.
* The first 7 bits of the first byte is a counter and bit 8 is a touch
* indicator that is 0 when pressed and 1 when not pressed.
* The next 3 bytes are two 12 bit touch coordinates, X and Y.
--
1.8.5.3
^ permalink raw reply related
* [PATCH 5/7] HID: sony: Set inital battery level to 100% to avoid false low battery warnings
From: Frank Praznik @ 2014-01-29 17:33 UTC (permalink / raw)
To: linux-input; +Cc: jkosina, Frank Praznik
In-Reply-To: <1391016797-12842-1-git-send-email-frank.praznik@oh.rr.com>
Set the inital battery level to 100% to avoid false low battery warnings if the
battery level is polled before a device report is received.
Signed-off-by: Frank Praznik <frank.praznik@oh.rr.com>
---
drivers/hid/hid-sony.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
index 7005086..cee752f 100644
--- a/drivers/hid/hid-sony.c
+++ b/drivers/hid/hid-sony.c
@@ -1404,6 +1404,11 @@ static int sony_battery_probe(struct sony_sc *sc)
struct hid_device *hdev = sc->hdev;
int ret;
+ /* Set the default battery level to 100% to avoid low battery warnings
+ * if the battery is polled before the first device report is received.
+ */
+ sc->battery_capacity = 100;
+
power_id = (unsigned long)atomic_inc_return(&power_id_seq);
sc->battery.properties = sony_battery_props;
--
1.8.5.3
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox