Home | History | Annotate | Line # | Download | only in i2c
tps65217pmic.c revision 1.1
      1  1.1  rkujawa /*	$NetBSD: tps65217pmic.c,v 1.1 2013/04/25 20:55:34 rkujawa Exp $ */
      2  1.1  rkujawa 
      3  1.1  rkujawa /*-
      4  1.1  rkujawa  * Copyright (c) 2013 The NetBSD Foundation, Inc.
      5  1.1  rkujawa  * All rights reserved.
      6  1.1  rkujawa  *
      7  1.1  rkujawa  * This code is derived from software contributed to The NetBSD Foundation
      8  1.1  rkujawa  * by Radoslaw Kujawa.
      9  1.1  rkujawa  *
     10  1.1  rkujawa  * Redistribution and use in source and binary forms, with or without
     11  1.1  rkujawa  * modification, are permitted provided that the following conditions
     12  1.1  rkujawa  * are met:
     13  1.1  rkujawa  * 1. Redistributions of source code must retain the above copyright
     14  1.1  rkujawa  *    notice, this list of conditions and the following disclaimer.
     15  1.1  rkujawa  * 2. Redistributions in binary form must reproduce the above copyright
     16  1.1  rkujawa  *    notice, this list of conditions and the following disclaimer in the
     17  1.1  rkujawa  *    documentation and/or other materials provided with the distribution.
     18  1.1  rkujawa  *
     19  1.1  rkujawa  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20  1.1  rkujawa  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21  1.1  rkujawa  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22  1.1  rkujawa  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23  1.1  rkujawa  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24  1.1  rkujawa  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25  1.1  rkujawa  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26  1.1  rkujawa  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27  1.1  rkujawa  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28  1.1  rkujawa  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29  1.1  rkujawa  * POSSIBILITY OF SUCH DAMAGE.
     30  1.1  rkujawa  */
     31  1.1  rkujawa 
     32  1.1  rkujawa #include <sys/cdefs.h>
     33  1.1  rkujawa __KERNEL_RCSID(0, "$NetBSD: tps65217pmic.c,v 1.1 2013/04/25 20:55:34 rkujawa Exp $");
     34  1.1  rkujawa 
     35  1.1  rkujawa #include <sys/param.h>
     36  1.1  rkujawa #include <sys/systm.h>
     37  1.1  rkujawa #include <sys/device.h>
     38  1.1  rkujawa #include <sys/kernel.h>
     39  1.1  rkujawa 
     40  1.1  rkujawa #include <sys/bus.h>
     41  1.1  rkujawa #include <dev/i2c/i2cvar.h>
     42  1.1  rkujawa 
     43  1.1  rkujawa #include <dev/i2c/tps65217pmicreg.h>
     44  1.1  rkujawa 
     45  1.1  rkujawa struct tps65217pmic_softc {
     46  1.1  rkujawa 	device_t	sc_dev;
     47  1.1  rkujawa 
     48  1.1  rkujawa 	i2c_tag_t	sc_tag;
     49  1.1  rkujawa 	i2c_addr_t	sc_addr;
     50  1.1  rkujawa 
     51  1.1  rkujawa 	uint8_t		sc_version;
     52  1.1  rkujawa 	uint8_t		sc_revision;
     53  1.1  rkujawa };
     54  1.1  rkujawa 
     55  1.1  rkujawa static int tps65217pmic_match(device_t, cfdata_t, void *);
     56  1.1  rkujawa static void tps65217pmic_attach(device_t, device_t, void *);
     57  1.1  rkujawa 
     58  1.1  rkujawa static uint8_t tps65217pmic_reg_read(struct tps65217pmic_softc *sc,
     59  1.1  rkujawa     uint8_t reg);
     60  1.1  rkujawa 
     61  1.1  rkujawa static uint16_t tps65217pmic_ppath_max_usb_current(uint8_t ppath);
     62  1.1  rkujawa static uint16_t tps65217pmic_ppath_max_ac_current(uint8_t ppath);
     63  1.1  rkujawa 
     64  1.1  rkujawa static void tps65217pmic_print_status(struct tps65217pmic_softc *sc);
     65  1.1  rkujawa static void tps65217pmic_version(struct tps65217pmic_softc *sc);
     66  1.1  rkujawa 
     67  1.1  rkujawa CFATTACH_DECL_NEW(tps65217pmic, sizeof (struct tps65217pmic_softc),
     68  1.1  rkujawa     tps65217pmic_match, tps65217pmic_attach, NULL, NULL);
     69  1.1  rkujawa 
     70  1.1  rkujawa /* Voltage regulators */
     71  1.1  rkujawa enum tpsreg {
     72  1.1  rkujawa 	TPS65217PMIC_LDO1,
     73  1.1  rkujawa 	TPS65217PMIC_LDO2,
     74  1.1  rkujawa 	TPS65217PMIC_LDO3LS,
     75  1.1  rkujawa 	TPS65217PMIC_LDO4LS,
     76  1.1  rkujawa 	TPS65217PMIC_DCDC1,
     77  1.1  rkujawa 	TPS65217PMIC_DCDC2,
     78  1.1  rkujawa 	TPS65217PMIC_DCDC3
     79  1.1  rkujawa };
     80  1.1  rkujawa 
     81  1.1  rkujawa /* Possible settings of LDO1 in mV. */
     82  1.1  rkujawa static const uint16_t ldo1voltages[] = { 1000, 1100, 1200, 1250, 1300, 1350,
     83  1.1  rkujawa     1400, 1500, 1600, 1800, 2500, 2750, 2800, 3000, 3100, 3300 };
     84  1.1  rkujawa /* Possible settings of LDO2, DCDC1, DCDC2, DCDC3 in mV. */
     85  1.1  rkujawa static const uint16_t ldo2voltages[] = { 900, 925, 950, 975, 1000, 1025, 1050,
     86  1.1  rkujawa     1075, 1100, 1125, 1150, 1175, 1200, 1225, 1250, 1275, 1300, 1325, 1350,
     87  1.1  rkujawa     1375, 1400, 1425, 1450, 1475, 1500, 1550, 1600, 1650, 1700, 1750, 1800,
     88  1.1  rkujawa     1850, 1900, 1950, 2000, 2050, 2100, 2150, 2200, 2250, 2300, 2350, 2400,
     89  1.1  rkujawa     2450, 2500, 2550, 2600, 2650, 2700, 2750, 2800, 2850, 2900, 3000, 3100,
     90  1.1  rkujawa     3200, 3300, 3300, 3300, 3300, 3300, 3300, 3300, 3300 };
     91  1.1  rkujawa /* Possible settings of LDO3, LDO4 in mV. */
     92  1.1  rkujawa static const uint16_t ldo3voltages[] = { 1500, 1550, 1600, 1650, 1700, 1750,
     93  1.1  rkujawa     1800, 1850,1900, 2000, 2100, 2200, 2300, 2400, 2450, 2500,2550, 2600,
     94  1.1  rkujawa     2650, 2700, 2750, 2800, 2850, 2900,2950, 3000, 3050, 3100, 3150, 3200,
     95  1.1  rkujawa     3250, 3300 };
     96  1.1  rkujawa 
     97  1.1  rkujawa static int
     98  1.1  rkujawa tps65217pmic_match(device_t parent, cfdata_t cf, void *aux)
     99  1.1  rkujawa {
    100  1.1  rkujawa 	struct i2c_attach_args *ia = aux;
    101  1.1  rkujawa 
    102  1.1  rkujawa 	if (ia->ia_addr == TPS65217PMIC_ADDR)
    103  1.1  rkujawa 		return 1;
    104  1.1  rkujawa 	return 0;
    105  1.1  rkujawa }
    106  1.1  rkujawa 
    107  1.1  rkujawa static void
    108  1.1  rkujawa tps65217pmic_attach(device_t parent, device_t self, void *aux)
    109  1.1  rkujawa {
    110  1.1  rkujawa 	struct tps65217pmic_softc *sc = device_private(self);
    111  1.1  rkujawa 	struct i2c_attach_args *ia = aux;
    112  1.1  rkujawa 
    113  1.1  rkujawa 	sc->sc_dev = self;
    114  1.1  rkujawa 	sc->sc_addr = ia->ia_addr;
    115  1.1  rkujawa 	sc->sc_tag = ia->ia_tag;
    116  1.1  rkujawa 
    117  1.1  rkujawa 	tps65217pmic_version(sc);
    118  1.1  rkujawa 
    119  1.1  rkujawa 	aprint_normal(": TPS65217");
    120  1.1  rkujawa 	switch (sc->sc_version) {
    121  1.1  rkujawa 	case TPS65217PMIC_CHIPID_VER_A:
    122  1.1  rkujawa 		aprint_normal("A");
    123  1.1  rkujawa 		break;
    124  1.1  rkujawa 	case TPS65217PMIC_CHIPID_VER_B:
    125  1.1  rkujawa 		aprint_normal("B");
    126  1.1  rkujawa 		break;
    127  1.1  rkujawa 	case TPS65217PMIC_CHIPID_VER_C:
    128  1.1  rkujawa 		aprint_normal("C");
    129  1.1  rkujawa 		break;
    130  1.1  rkujawa 	case TPS65217PMIC_CHIPID_VER_D:
    131  1.1  rkujawa 		aprint_normal("D");
    132  1.1  rkujawa 		break;
    133  1.1  rkujawa 	default:
    134  1.1  rkujawa 		/* unknown version */
    135  1.1  rkujawa 		break;
    136  1.1  rkujawa 	}
    137  1.1  rkujawa 
    138  1.1  rkujawa 	aprint_normal(" Power Management Multi-Channel IC (rev 1.%d)\n",
    139  1.1  rkujawa 	    sc->sc_revision);
    140  1.1  rkujawa 
    141  1.1  rkujawa 	tps65217pmic_print_status(sc);
    142  1.1  rkujawa }
    143  1.1  rkujawa 
    144  1.1  rkujawa /* Get version and revision of the chip. */
    145  1.1  rkujawa static void
    146  1.1  rkujawa tps65217pmic_version(struct tps65217pmic_softc *sc)
    147  1.1  rkujawa {
    148  1.1  rkujawa 	uint8_t chipid;
    149  1.1  rkujawa 
    150  1.1  rkujawa 	chipid = tps65217pmic_reg_read(sc, TPS65217PMIC_CHIPID);
    151  1.1  rkujawa 
    152  1.1  rkujawa 	sc->sc_version = chipid & TPS65217PMIC_CHIPID_VER_MASK;
    153  1.1  rkujawa 	sc->sc_revision = chipid & TPS65217PMIC_CHIPID_REV_MASK;
    154  1.1  rkujawa }
    155  1.1  rkujawa 
    156  1.1  rkujawa static uint16_t
    157  1.1  rkujawa tps65217pmic_ppath_max_ac_current(uint8_t ppath)
    158  1.1  rkujawa {
    159  1.1  rkujawa 	switch ((ppath & TPS65217PMIC_PPATH_IAC) >>
    160  1.1  rkujawa 	    TPS65217PMIC_PPATH_IAC_RSHFIT) {
    161  1.1  rkujawa 	case TPS65217PMIC_PPATH_IAC_100MA:
    162  1.1  rkujawa 		return 100;
    163  1.1  rkujawa 	case TPS65217PMIC_PPATH_IAC_500MA:
    164  1.1  rkujawa 		return 300;
    165  1.1  rkujawa 	case TPS65217PMIC_PPATH_IAC_1300MA:
    166  1.1  rkujawa 		return 1300;
    167  1.1  rkujawa 	case TPS65217PMIC_PPATH_IAC_2500MA:
    168  1.1  rkujawa 		return 2500;
    169  1.1  rkujawa 	}
    170  1.1  rkujawa 	return 0;
    171  1.1  rkujawa }
    172  1.1  rkujawa 
    173  1.1  rkujawa static uint16_t
    174  1.1  rkujawa tps65217pmic_ppath_max_usb_current(uint8_t ppath)
    175  1.1  rkujawa {
    176  1.1  rkujawa 	switch (ppath & TPS65217PMIC_PPATH_IUSB) {
    177  1.1  rkujawa 	case TPS65217PMIC_PPATH_IUSB_100MA:
    178  1.1  rkujawa 		return 100;
    179  1.1  rkujawa 	case TPS65217PMIC_PPATH_IUSB_500MA:
    180  1.1  rkujawa 		return 300;
    181  1.1  rkujawa 	case TPS65217PMIC_PPATH_IUSB_1300MA:
    182  1.1  rkujawa 		return 1300;
    183  1.1  rkujawa 	case TPS65217PMIC_PPATH_IUSB_1800MA:
    184  1.1  rkujawa 		return 1800;
    185  1.1  rkujawa 	}
    186  1.1  rkujawa 	return 0;
    187  1.1  rkujawa }
    188  1.1  rkujawa 
    189  1.1  rkujawa static uint16_t
    190  1.1  rkujawa tps65217pmic_regulator_voltage(struct tps65217pmic_softc *sc, uint8_t regulator)
    191  1.1  rkujawa {
    192  1.1  rkujawa 	uint8_t defreg;
    193  1.1  rkujawa 
    194  1.1  rkujawa 	switch (regulator) {
    195  1.1  rkujawa 	case TPS65217PMIC_LDO1:
    196  1.1  rkujawa 		defreg = tps65217pmic_reg_read(sc, TPS65217PMIC_DEFLDO1);
    197  1.1  rkujawa 		return ldo1voltages[defreg];
    198  1.1  rkujawa 	case TPS65217PMIC_LDO2:
    199  1.1  rkujawa 		defreg = tps65217pmic_reg_read(sc, TPS65217PMIC_DEFLDO2);
    200  1.1  rkujawa 		if (defreg & TPS65217PMIC_DEFLDO2_TRACKING)
    201  1.1  rkujawa 			return tps65217pmic_regulator_voltage(sc,
    202  1.1  rkujawa 			    TPS65217PMIC_DCDC3);
    203  1.1  rkujawa 		return ldo2voltages[defreg & TPS65217PMIC_DEFLDO2_VOLTAGE];
    204  1.1  rkujawa 	case TPS65217PMIC_LDO3LS:
    205  1.1  rkujawa 		defreg = tps65217pmic_reg_read(sc, TPS65217PMIC_DEFLDO3);
    206  1.1  rkujawa 		if (!(defreg & TPS65217PMIC_DEFLDOX_LS))
    207  1.1  rkujawa 			return 0;
    208  1.1  rkujawa 		return ldo3voltages[defreg & TPS65217PMIC_DEFLDO3_VOLTAGE];
    209  1.1  rkujawa 	case TPS65217PMIC_LDO4LS:
    210  1.1  rkujawa 		defreg = tps65217pmic_reg_read(sc, TPS65217PMIC_DEFLDO4);
    211  1.1  rkujawa 		if (!(defreg & TPS65217PMIC_DEFLDOX_LS))
    212  1.1  rkujawa 			return 0;
    213  1.1  rkujawa 		return ldo3voltages[defreg & TPS65217PMIC_DEFLDO4_VOLTAGE];
    214  1.1  rkujawa 	case TPS65217PMIC_DCDC1:
    215  1.1  rkujawa 		defreg = tps65217pmic_reg_read(sc, TPS65217PMIC_DEFDCDC1);
    216  1.1  rkujawa 		/* if (defreg & TPS65217PMIC_DEFDCDCX_XADJ) XXX */
    217  1.1  rkujawa 		return ldo2voltages[defreg & TPS65217PMIC_DEFDCDCX_VOLTAGE];
    218  1.1  rkujawa 	case TPS65217PMIC_DCDC2:
    219  1.1  rkujawa 		defreg = tps65217pmic_reg_read(sc, TPS65217PMIC_DEFDCDC2);
    220  1.1  rkujawa 		/* if (defreg & TPS65217PMIC_DEFDCDCX_XADJ) XXX */
    221  1.1  rkujawa 		return ldo2voltages[defreg & TPS65217PMIC_DEFDCDCX_VOLTAGE];
    222  1.1  rkujawa 	case TPS65217PMIC_DCDC3:
    223  1.1  rkujawa 		defreg = tps65217pmic_reg_read(sc, TPS65217PMIC_DEFDCDC3);
    224  1.1  rkujawa 		/* if (defreg & TPS65217PMIC_DEFDCDCX_XADJ) XXX */
    225  1.1  rkujawa 		return ldo2voltages[defreg & TPS65217PMIC_DEFDCDCX_VOLTAGE];
    226  1.1  rkujawa 	default:
    227  1.1  rkujawa 		aprint_error_dev(sc->sc_dev, "unknown regulator %x", regulator);
    228  1.1  rkujawa 		break;
    229  1.1  rkujawa 	}
    230  1.1  rkujawa 
    231  1.1  rkujawa 	return 0;
    232  1.1  rkujawa }
    233  1.1  rkujawa 
    234  1.1  rkujawa static void
    235  1.1  rkujawa tps65217pmic_print_status(struct tps65217pmic_softc *sc)
    236  1.1  rkujawa {
    237  1.1  rkujawa 	uint8_t status, ppath, regenable;
    238  1.1  rkujawa 	bool ldols;
    239  1.1  rkujawa 
    240  1.1  rkujawa 	ppath = tps65217pmic_reg_read(sc, TPS65217PMIC_PPATH);
    241  1.1  rkujawa 	status = tps65217pmic_reg_read(sc, TPS65217PMIC_STATUS);
    242  1.1  rkujawa 	regenable = tps65217pmic_reg_read(sc, TPS65217PMIC_ENABLE);
    243  1.1  rkujawa 
    244  1.1  rkujawa 	aprint_normal_dev(sc->sc_dev, "power sources ");
    245  1.1  rkujawa 
    246  1.1  rkujawa 	if (ppath & TPS65217PMIC_PPATH_USB_EN) {
    247  1.1  rkujawa 		if (status & TPS65217PMIC_STATUS_USBPWR)
    248  1.1  rkujawa 			aprint_normal("[USB] ");
    249  1.1  rkujawa 		else
    250  1.1  rkujawa 			aprint_normal("USB ");
    251  1.1  rkujawa 		aprint_normal("max %d mA, ",
    252  1.1  rkujawa 		    tps65217pmic_ppath_max_usb_current(ppath));
    253  1.1  rkujawa 	}
    254  1.1  rkujawa 
    255  1.1  rkujawa 	if (ppath & TPS65217PMIC_PPATH_AC_EN) {
    256  1.1  rkujawa 		if (status & TPS65217PMIC_STATUS_ACPWR)
    257  1.1  rkujawa 			aprint_normal("[AC] ");
    258  1.1  rkujawa 		else
    259  1.1  rkujawa 			aprint_normal("AC ");
    260  1.1  rkujawa 		aprint_normal("max %d mA",
    261  1.1  rkujawa 		    tps65217pmic_ppath_max_ac_current(ppath));
    262  1.1  rkujawa 	}
    263  1.1  rkujawa 
    264  1.1  rkujawa 	aprint_normal("\n");
    265  1.1  rkujawa 
    266  1.1  rkujawa 	aprint_normal_dev(sc->sc_dev, "");
    267  1.1  rkujawa 	if(regenable & TPS65217PMIC_ENABLE_LDO1)
    268  1.1  rkujawa 		aprint_normal("[LDO1: %d mV] ",
    269  1.1  rkujawa 		    tps65217pmic_regulator_voltage(sc, TPS65217PMIC_LDO1));
    270  1.1  rkujawa 
    271  1.1  rkujawa 	if(regenable & TPS65217PMIC_ENABLE_LDO2)
    272  1.1  rkujawa 		aprint_normal("[LDO2: %d mV] ",
    273  1.1  rkujawa 		    tps65217pmic_regulator_voltage(sc, TPS65217PMIC_LDO2));
    274  1.1  rkujawa 
    275  1.1  rkujawa 	if(regenable & TPS65217PMIC_ENABLE_LDO3) {
    276  1.1  rkujawa 		ldols = tps65217pmic_reg_read(sc, TPS65217PMIC_DEFLDO3) &
    277  1.1  rkujawa 		    TPS65217PMIC_DEFLDOX_LS;
    278  1.1  rkujawa 		if (!ldols)
    279  1.1  rkujawa 			aprint_normal("[LDO3: LS] ");
    280  1.1  rkujawa 		else
    281  1.1  rkujawa 			aprint_normal("[LDO3: %d mV] ",
    282  1.1  rkujawa 			    tps65217pmic_regulator_voltage(sc,
    283  1.1  rkujawa 			        TPS65217PMIC_LDO3LS));
    284  1.1  rkujawa 	}
    285  1.1  rkujawa 
    286  1.1  rkujawa 	if(regenable & TPS65217PMIC_ENABLE_LDO4) {
    287  1.1  rkujawa 		ldols = tps65217pmic_reg_read(sc, TPS65217PMIC_DEFLDO4) &
    288  1.1  rkujawa 		    TPS65217PMIC_DEFLDOX_LS;
    289  1.1  rkujawa 		if (!ldols)
    290  1.1  rkujawa 			aprint_normal("[LDO4: LS]");
    291  1.1  rkujawa 		else
    292  1.1  rkujawa 			aprint_normal("[LDO4: %d mV] ",
    293  1.1  rkujawa 			    tps65217pmic_regulator_voltage(sc,
    294  1.1  rkujawa 			        TPS65217PMIC_LDO4LS));
    295  1.1  rkujawa 	}
    296  1.1  rkujawa 
    297  1.1  rkujawa 	if(regenable & TPS65217PMIC_ENABLE_DCDC1)
    298  1.1  rkujawa 		aprint_normal("[DCDC1: %d mV] ",
    299  1.1  rkujawa 		    tps65217pmic_regulator_voltage(sc, TPS65217PMIC_DCDC1));
    300  1.1  rkujawa 
    301  1.1  rkujawa 	if(regenable & TPS65217PMIC_ENABLE_DCDC2)
    302  1.1  rkujawa 		aprint_normal("[DCDC2: %d mV] ",
    303  1.1  rkujawa 		    tps65217pmic_regulator_voltage(sc, TPS65217PMIC_DCDC2));
    304  1.1  rkujawa 
    305  1.1  rkujawa 	if(regenable & TPS65217PMIC_ENABLE_DCDC3)
    306  1.1  rkujawa 		aprint_normal("[DCDC3: %d mV] ",
    307  1.1  rkujawa 		    tps65217pmic_regulator_voltage(sc, TPS65217PMIC_DCDC3));
    308  1.1  rkujawa 
    309  1.1  rkujawa 	aprint_normal("\n");
    310  1.1  rkujawa }
    311  1.1  rkujawa 
    312  1.1  rkujawa static uint8_t
    313  1.1  rkujawa tps65217pmic_reg_read(struct tps65217pmic_softc *sc, uint8_t reg)
    314  1.1  rkujawa {
    315  1.1  rkujawa 	uint8_t wbuf[2];
    316  1.1  rkujawa 	uint8_t rv;
    317  1.1  rkujawa 
    318  1.1  rkujawa 	if (iic_acquire_bus(sc->sc_tag, I2C_F_POLL) != 0) {
    319  1.1  rkujawa 		aprint_error_dev(sc->sc_dev, "cannot acquire bus for read\n");
    320  1.1  rkujawa 		return 0;
    321  1.1  rkujawa 	}
    322  1.1  rkujawa 
    323  1.1  rkujawa 	wbuf[0] = reg;
    324  1.1  rkujawa 
    325  1.1  rkujawa 	if (iic_exec(sc->sc_tag, I2C_OP_READ_WITH_STOP, sc->sc_addr, wbuf,
    326  1.1  rkujawa 	    1, &rv, 1, I2C_F_POLL)) {
    327  1.1  rkujawa 		aprint_error_dev(sc->sc_dev, "cannot execute operation\n");
    328  1.1  rkujawa 		iic_release_bus(sc->sc_tag, I2C_F_POLL);
    329  1.1  rkujawa 		return 0;
    330  1.1  rkujawa 	}
    331  1.1  rkujawa 	iic_release_bus(sc->sc_tag, I2C_F_POLL);
    332  1.1  rkujawa 
    333  1.1  rkujawa 	return rv;
    334  1.1  rkujawa }
    335  1.1  rkujawa 
    336