Пример #1
0
int brickpi_in_port_register_sensor(struct brickpi_in_port_data *in_port,
				    const struct device_type *device_type,
				    const char *name)
{
	struct lego_device *new_sensor;

	if (device_type == &brickpi_in_port_device_types[BRICKPI_IN_PORT_MODE_NXT_I2C]) {
		struct brickpi_i2c_sensor_platform_data pdata;

		pdata.address = in_port->i2c_msg[0].addr;
		new_sensor = lego_device_register(name, device_type,
			&in_port->port, &pdata,
			sizeof(struct brickpi_i2c_sensor_platform_data));
	} else {
		new_sensor = lego_device_register(name, device_type,
						  &in_port->port, NULL, 0);
	}

	if (IS_ERR(new_sensor))
		return PTR_ERR(new_sensor);

	in_port->sensor = new_sensor;

	return 0;
}
Пример #2
0
int ms_nxtmmx_out_port_register_motor(struct ms_nxtmmx_data *mmx,
				      const struct device_type *device_type,
				      const char *name)
{
	struct lego_device *new_motor;

	new_motor = lego_device_register(name, device_type,
					 &mmx->port, NULL, 0);
	if (IS_ERR(new_motor))
		return PTR_ERR(new_motor);

	mmx->motor = new_motor;

	return 0;
}
int brickpi_in_port_register_sensor(struct brickpi_in_port_data *in_port,
				    const struct device_type *device_type,
				    const char *name)
{
	struct lego_device *new_sensor;

	new_sensor = lego_device_register(name, device_type, &in_port->port,
					  NULL, 0);
	if (IS_ERR(new_sensor))
		return PTR_ERR(new_sensor);

	in_port->sensor = new_sensor;

	return 0;
}
static int ev3_output_port_set_device(void *context, const char *device_name)
{
	struct ev3_output_port_data *data = context;
	struct lego_device *new_motor;

	if (data->motor_type != MOTOR_TACHO)
		return -EOPNOTSUPP;

	lego_device_unregister(data->motor);
	data->motor = NULL;

	new_motor = lego_device_register(device_name,
		&ev3_motor_device_types[data->motor_type],
		&data->out_port, NULL, 0);
	if (IS_ERR(new_motor))
		return PTR_ERR(new_motor);

	data->motor = new_motor;

	return 0;
}
void ev3_output_port_register_motor(struct work_struct *work)
{
	struct ev3_output_port_data *data =
			container_of(work, struct ev3_output_port_data, work);
	struct lego_device *motor;
	struct ev3_motor_platform_data pdata;
	const char *driver_name;

	if (data->motor_type == MOTOR_NONE
		|| data->motor_type == MOTOR_ERR
		|| data->motor_type >= NUM_MOTOR)
	{
		dev_err(&data->out_port.dev,
			"Trying to register an invalid motor type on %s.\n",
			dev_name(&data->out_port.dev));
		return;
	}

	pdata.tacho_int_gpio = data->gpio[GPIO_PIN5_INT].gpio;
	pdata.tacho_dir_gpio = data->gpio[GPIO_PIN6_DIR].gpio;
	if (data->motor_type == MOTOR_TACHO)
		driver_name = legoev3_motor_defs[data->motor_id].name;
	else
		driver_name = ev3_motor_device_types[data->motor_type].name;

	motor = lego_device_register(driver_name,
		&ev3_motor_device_types[data->motor_type],
		&data->out_port, &pdata, sizeof(struct ev3_motor_platform_data));
	if (IS_ERR(motor)) {
		dev_err(&data->out_port.dev,
			"Could not register motor on port %s.\n",
			dev_name(&data->out_port.dev));
		return;
	}

	data->motor = motor;

	return;
}