1 | // SPDX-License-Identifier: GPL-2.0 |
---|---|
2 | /* dvb-usb-i2c.c is part of the DVB USB library. |
3 | * |
4 | * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@posteo.de) |
5 | * see dvb-usb-init.c for copyright information. |
6 | * |
7 | * This file contains functions for (de-)initializing an I2C adapter. |
8 | */ |
9 | #include "dvb-usb-common.h" |
10 | |
11 | int dvb_usb_i2c_init(struct dvb_usb_device *d) |
12 | { |
13 | int ret = 0; |
14 | |
15 | if (!(d->props.caps & DVB_USB_IS_AN_I2C_ADAPTER)) |
16 | return 0; |
17 | |
18 | if (d->props.i2c_algo == NULL) { |
19 | err("no i2c algorithm specified"); |
20 | ret = -EINVAL; |
21 | goto err; |
22 | } |
23 | |
24 | strscpy(d->i2c_adap.name, d->desc->name, sizeof(d->i2c_adap.name)); |
25 | d->i2c_adap.algo = d->props.i2c_algo; |
26 | d->i2c_adap.algo_data = NULL; |
27 | d->i2c_adap.dev.parent = &d->udev->dev; |
28 | |
29 | i2c_set_adapdata(adap: &d->i2c_adap, data: d); |
30 | |
31 | ret = i2c_add_adapter(adap: &d->i2c_adap); |
32 | if (ret < 0) { |
33 | err("could not add i2c adapter"); |
34 | goto err; |
35 | } |
36 | |
37 | d->state |= DVB_USB_STATE_I2C; |
38 | |
39 | err: |
40 | return ret; |
41 | } |
42 | |
43 | int dvb_usb_i2c_exit(struct dvb_usb_device *d) |
44 | { |
45 | if (d->state & DVB_USB_STATE_I2C) |
46 | i2c_del_adapter(adap: &d->i2c_adap); |
47 | d->state &= ~DVB_USB_STATE_I2C; |
48 | return 0; |
49 | } |
50 |