18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci/* dvb-usb-i2c.c is part of the DVB USB library. 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@posteo.de) 58c2ecf20Sopenharmony_ci * see dvb-usb-init.c for copyright information. 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * This file contains functions for (de-)initializing an I2C adapter. 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci#include "dvb-usb-common.h" 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ciint dvb_usb_i2c_init(struct dvb_usb_device *d) 128c2ecf20Sopenharmony_ci{ 138c2ecf20Sopenharmony_ci int ret = 0; 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci if (!(d->props.caps & DVB_USB_IS_AN_I2C_ADAPTER)) 168c2ecf20Sopenharmony_ci return 0; 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci if (d->props.i2c_algo == NULL) { 198c2ecf20Sopenharmony_ci err("no i2c algorithm specified"); 208c2ecf20Sopenharmony_ci ret = -EINVAL; 218c2ecf20Sopenharmony_ci goto err; 228c2ecf20Sopenharmony_ci } 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci strscpy(d->i2c_adap.name, d->desc->name, sizeof(d->i2c_adap.name)); 258c2ecf20Sopenharmony_ci d->i2c_adap.algo = d->props.i2c_algo; 268c2ecf20Sopenharmony_ci d->i2c_adap.algo_data = NULL; 278c2ecf20Sopenharmony_ci d->i2c_adap.dev.parent = &d->udev->dev; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci i2c_set_adapdata(&d->i2c_adap, d); 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci ret = i2c_add_adapter(&d->i2c_adap); 328c2ecf20Sopenharmony_ci if (ret < 0) { 338c2ecf20Sopenharmony_ci err("could not add i2c adapter"); 348c2ecf20Sopenharmony_ci goto err; 358c2ecf20Sopenharmony_ci } 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci d->state |= DVB_USB_STATE_I2C; 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_cierr: 408c2ecf20Sopenharmony_ci return ret; 418c2ecf20Sopenharmony_ci} 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ciint dvb_usb_i2c_exit(struct dvb_usb_device *d) 448c2ecf20Sopenharmony_ci{ 458c2ecf20Sopenharmony_ci if (d->state & DVB_USB_STATE_I2C) 468c2ecf20Sopenharmony_ci i2c_del_adapter(&d->i2c_adap); 478c2ecf20Sopenharmony_ci d->state &= ~DVB_USB_STATE_I2C; 488c2ecf20Sopenharmony_ci return 0; 498c2ecf20Sopenharmony_ci} 50