コード例 #1
0
static int ev3_uart_sensor_remove(struct lego_device *ldev)
{
	struct ev3_uart_sensor_data *data = dev_get_drvdata(&ldev->dev);

	lego_port_set_raw_data_ptr_and_func(ldev->port, NULL, 0, NULL, NULL);
	unregister_lego_sensor(&data->sensor);
	dev_set_drvdata(&ldev->dev, NULL);
	kfree(data);
	return 0;
}
コード例 #2
0
static int ht_nxt_smux_i2c_sensor_remove(struct lego_device *ldev)
{
	struct ht_nxt_smux_i2c_sensor_data *data = dev_get_drvdata(&ldev->dev);

	lego_port_set_raw_data_ptr_and_func(ldev->port, NULL, 0, NULL, NULL);
	ldev->port->nxt_i2c_ops->set_pin1_gpio(ldev->port->context,
					       LEGO_PORT_GPIO_FLOAT);
	unregister_lego_sensor(&data->sensor);
	dev_set_drvdata(&ldev->dev, NULL);
	kfree(data);

	return 0;
}
コード例 #3
0
static int nxt_i2c_sensor_remove(struct i2c_client *client)
{
	struct nxt_i2c_sensor_data *data = i2c_get_clientdata(client);

	if (data->info->ops && data->info->ops->remove_cb)
		data->info->ops->remove_cb(data);
	data->poll_ms = 0;
	hrtimer_cancel(&data->poll_timer);
	cancel_work_sync(&data->poll_work);
	if (data->in_port && data->in_port->nxt_i2c_ops)
		data->in_port->nxt_i2c_ops->set_pin1_gpio(data->in_port->context,
							  LEGO_PORT_GPIO_FLOAT);
	unregister_lego_sensor(&data->sensor);
	kfree(data->sensor.mode_info);
	kfree(data);

	return 0;
}
コード例 #4
0
static void ev3_uart_close(struct tty_struct *tty)
{
	struct ev3_uart_port_data *port = tty->disc_data;

	port->closing = true;
	if (!completion_done(&port->set_mode_completion))
		complete(&port->set_mode_completion);
	cancel_work_sync(&port->rx_data_work);
	cancel_delayed_work_sync(&port->send_ack_work);
	cancel_work_sync(&port->change_bitrate_work);
	hrtimer_cancel(&port->keep_alive_timer);
	tasklet_kill(&port->keep_alive_tasklet);
	if (port->sensor.context)
		unregister_lego_sensor(&port->sensor);
	if (port->in_port)
		put_device(&port->in_port->dev);
	tty->disc_data = NULL;
	kfree(port);
}