Exemplo n.º 1
0
static int flash_question(struct vmm_chardev *cdev)
{
	char ans = 0;

	vmm_cprintf(cdev, "Continue [Y/n]?\n");
	ans = vmm_cgetc(cdev, FALSE);
	vmm_printf("\n");
	return (ans == '\n') || (ans == 'y') || (ans == 'Y');
}
Exemplo n.º 2
0
static int cmd_i2c_detect(struct vmm_chardev *cdev,
			  int argc,
			  char **argv)
{
	char ans = 0;
	int err = VMM_OK;
	int mode = MODE_AUTO;
	int first = 0x03;
	int last = 0x77;
	unsigned int funcs = 0;
	struct i2c_adapter *adap = NULL;

	err = cmd_i2c_common(cdev, argc, argv, &adap, &funcs);
	if (VMM_OK != err) {
		return err;
	}

	if (argc >= 4) {
		if (!strcmp(argv[3], "read")) {
			mode = MODE_READ;
		} else if (!strcmp(argv[3], "quick")) {
			mode = MODE_QUICK;
		} else {
			vmm_cprintf(cdev, "Unknown mode %s\n", mode);
		}
	}

	if (!(funcs & (I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_READ_BYTE))) {
		vmm_cprintf(cdev, "Error: Bus doesn't support detection "
			    "commands\n");
		err = VMM_EFAIL;
		goto out;
	}

	if (mode == MODE_AUTO) {
		if (!(funcs & I2C_FUNC_SMBUS_QUICK))
			vmm_cprintf(cdev, "Warning: Can't use SMBus Quick "
				    "Write command, will skip some "
				    "addresses\n");
		if (!(funcs & I2C_FUNC_SMBUS_READ_BYTE))
			vmm_cprintf(cdev, "Warning: Can't use SMBus Receive "
				    "Byte command, will skip some "
				    "addresses\n");
	}

	vmm_cprintf(cdev, "WARNING! This program can confuse your I2C "
		    "bus, cause data loss and worse!\n");
	vmm_cprintf(cdev, "Probing %s", adap->name);
	if (MODE_QUICK == mode) {
		vmm_cprintf(cdev, " using quick write commands\n");
	} else if (MODE_READ == mode)  {
		vmm_cprintf(cdev, " using receive byte commands\n");
	} else {
		vmm_cprintf(cdev, " (auto)\n");
	}
	vmm_cprintf(cdev, "  address range 0x%02x-0x%02x.\n", first, last);
	vmm_cprintf(cdev, "Continue? [Y/n] ");

	ans = vmm_cgetc(cdev, 0);
	if ('\n' != ans && 'y' != ans && 'Y' != ans) {
		vmm_cprintf(cdev, "Aborting on user request.\n");
		goto out;
	}

	err = i2c_scan_bus(cdev, adap, mode, funcs, first, last);
out:
	i2c_put_adapter(adap);

	return err;
}