static int _ardbeg_wifi_get_mac_addr_nct(unsigned char *buf) { int ret = -ENODATA; #ifdef CONFIG_TEGRA_USE_NCT union nct_item_type *entry = NULL; entry = kmalloc(sizeof(union nct_item_type), GFP_KERNEL); if (entry) { if (!tegra_nct_read_item(NCT_ID_WIFI_MAC_ADDR, entry)) { memcpy(buf, entry->wifi_mac_addr.addr, sizeof(struct nct_mac_addr_type)); ret = 0; } kfree(entry); } if (ret) pr_warn("%s: Couldn't find MAC address from NCT\n", __func__); #endif return ret; }
static ssize_t nct_item_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { ssize_t rval = 0; union nct_item_type item; int err; if (attr == &serial_number_attr) { err = tegra_nct_read_item(NCT_ID_SERIAL_NUMBER, &item); if (err < 0) return 0; rval = sprintf(buf, "%s\n", item.serial_number.sn); } else if (attr == &wifi_mac_addr_attr) { err = tegra_nct_read_item(NCT_ID_WIFI_MAC_ADDR, &item); if (err < 0) return 0; rval = sprintf(buf, "%02x:%02x:%02x:%02x:%02x:%02x\n", item.wifi_mac_addr.addr[0], item.wifi_mac_addr.addr[1], item.wifi_mac_addr.addr[2], item.wifi_mac_addr.addr[3], item.wifi_mac_addr.addr[4], item.wifi_mac_addr.addr[5]); } else if (attr == &bt_addr_attr) { err = tegra_nct_read_item(NCT_ID_BT_ADDR, &item); if (err < 0) return 0; rval = sprintf(buf, "%02x:%02x:%02x:%02x:%02x:%02x\n", item.bt_addr.addr[0], item.bt_addr.addr[1], item.bt_addr.addr[2], item.bt_addr.addr[3], item.bt_addr.addr[4], item.bt_addr.addr[5]); } else if (attr == &cm_id_attr) { err = tegra_nct_read_item(NCT_ID_CM_ID, &item); if (err < 0) return 0; rval = sprintf(buf, "%04d\n", item.cm_id.id); } else if (attr == &lbh_id_attr) { err = tegra_nct_read_item(NCT_ID_LBH_ID, &item); if (err < 0) return 0; rval = sprintf(buf, "%04d\n", item.lbh_id.id); } else if (attr == &boardinfo_id_attr) { err = tegra_nct_read_item(NCT_ID_BOARD_INFO, &item); if (err < 0) return 0; rval = sprintf(buf, "Proc: %4u (sku: %u, fab: %u)\n" "PMU : %4u (sku: %u, fab: %u)\n" "Disp: %4u (sku: %u, fab: %u)\n", item.board_info.proc_board_id, item.board_info.proc_sku, item.board_info.proc_fab, item.board_info.pmu_board_id, item.board_info.pmu_sku, item.board_info.pmu_fab, item.board_info.display_board_id, item.board_info.display_sku, item.board_info.display_fab); } else if (attr == &gps_id_attr) { err = tegra_nct_read_item(NCT_ID_GPS_ID, &item); if (err < 0) return 0; rval = sprintf(buf, "%04d\n", item.gps_id.id); } else if (attr == &lcd_id_attr) { err = tegra_nct_read_item(NCT_ID_LCD_ID, &item); if (err < 0) return 0; rval = sprintf(buf, "%04d\n", item.lcd_id.id); } else if (attr == &accelerometer_id_attr) { err = tegra_nct_read_item(NCT_ID_ACCELEROMETER_ID, &item); if (err < 0) return 0; rval = sprintf(buf, "%04d\n", item.accelerometer_id.id); } else if (attr == &compass_id_attr) { err = tegra_nct_read_item(NCT_ID_COMPASS_ID, &item); if (err < 0) return 0; rval = sprintf(buf, "%04d\n", item.compass_id.id); } else if (attr == &gyroscope_id_attr) { err = tegra_nct_read_item(NCT_ID_GYROSCOPE_ID, &item); if (err < 0) return 0; rval = sprintf(buf, "%04d\n", item.gyroscope_id.id); } else if (attr == &light_id_attr) { err = tegra_nct_read_item(NCT_ID_LIGHT_ID, &item); if (err < 0) return 0; rval = sprintf(buf, "%04d\n", item.light_id.id); } else if (attr == &charger_id_attr) { err = tegra_nct_read_item(NCT_ID_CHARGER_ID, &item); if (err < 0) return 0; rval = sprintf(buf, "%04d\n", item.charger_id.id); } else if (attr == &touch_id_attr) { err = tegra_nct_read_item(NCT_ID_TOUCH_ID, &item); if (err < 0) return 0; rval = sprintf(buf, "%04d\n", item.touch_id.id); } return rval; }
static int __init nvdumper_init(void) { int ret, dirty; #ifdef CONFIG_TEGRA_USE_NCT union nct_item_type *item; #endif if (!nvdumper_reserved) { pr_info("nvdumper: not configured\n"); return -ENOTSUPP; } nvdumper_ptr = ioremap_nocache(nvdumper_reserved, NVDUMPER_RESERVED_SIZE); if (!nvdumper_ptr) { pr_info("nvdumper: failed to ioremap memory at 0x%08lx\n", nvdumper_reserved); return -EIO; } ret = register_reboot_notifier(&nvdumper_reboot_notifier); if (ret) goto err_out1; ret = nvdumper_regdump_init(); if (ret) goto err_out2; nvdumper_dbg_footprint_init(); dirty = get_dirty_state(); switch (dirty) { case 0: pr_info("nvdumper: last reboot was clean\n"); break; case 1: pr_info("nvdumper: last reboot was dirty\n"); break; default: pr_info("nvdumper: last reboot was unknown\n"); break; } #ifdef CONFIG_TEGRA_USE_NCT item = kzalloc(sizeof(*item), GFP_KERNEL); if (!item) { pr_err("failed to allocate memory\n"); goto err_out3; } ret = tegra_nct_read_item(NCT_ID_RAMDUMP, item); if (ret < 0) { pr_err("%s: NCT read failure\n", __func__); kfree(item); goto err_out3; } pr_info("%s: RAMDUMP flag(%d) from NCT\n", __func__, item->ramdump.flag); if (item->ramdump.flag == 1) set_dirty_state(1); else set_dirty_state(0); kfree(item); return 0; err_out3: #else set_dirty_state(1); return 0; #endif err_out2: unregister_reboot_notifier(&nvdumper_reboot_notifier); err_out1: iounmap(nvdumper_ptr); return ret; }