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;
}
Example #2
0
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;
}
Example #3
0
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;

}