Lines Matching +full:reg +full:- +full:addr
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
28 /* Dialog Semiconductor DA9063 PMIC, 2-WIRE */
47 #define DA9063_IIC_PAGE_OFF(_a) ((_a) & (DA9063_IIC_PAGE_SIZE - 1))
51 * For 2-WIRE (I2C) operation pages are 256 registers but PAGE_CON is in units
63 #define DA9063_IIC_LOCK(sc) mtx_lock(&(sc)->mtx)
64 #define DA9063_IIC_UNLOCK(sc) mtx_unlock(&(sc)->mtx)
65 #define DA9063_IIC_ASSERT_LOCKED(sc) mtx_assert(&(sc)->mtx, MA_OWNED);
66 #define DA9063_IIC_ASSERT_UNLOCKED(sc) mtx_assert(&(sc)->mtx, MA_NOTOWNED);
76 uint8_t reg; in da9063_iic_select_page() local
81 if (page == sc->page) in da9063_iic_select_page()
84 error = iicdev_readfrom(sc->dev, DA9063_PAGE_CON, ®, 1, IIC_WAIT); in da9063_iic_select_page()
88 reg &= ~(DA9063_PAGE_CON_REG_PAGE_MASK << in da9063_iic_select_page()
90 reg |= (page << DA9063_IIC_PAGE_CON_REG_PAGE_SHIFT) << in da9063_iic_select_page()
93 error = iicdev_writeto(sc->dev, DA9063_PAGE_CON, ®, 1, IIC_WAIT); in da9063_iic_select_page()
97 sc->page = page; in da9063_iic_select_page()
103 da9063_iic_read(device_t dev, uint16_t addr, uint8_t *val) in da9063_iic_read() argument
112 error = da9063_iic_select_page(sc, DA9063_IIC_PAGE(addr)); in da9063_iic_read()
116 error = iicdev_readfrom(dev, DA9063_IIC_PAGE_OFF(addr), val, 1, in da9063_iic_read()
128 da9063_iic_write(device_t dev, uint16_t addr, uint8_t val) in da9063_iic_write() argument
137 error = da9063_iic_select_page(sc, DA9063_IIC_PAGE(addr)); in da9063_iic_write()
141 error = iicdev_writeto(dev, DA9063_IIC_PAGE_OFF(addr), &val, 1, in da9063_iic_write()
153 da9063_iic_modify(device_t dev, uint16_t addr, uint8_t clear_mask, in da9063_iic_modify() argument
157 uint8_t reg; in da9063_iic_modify() local
164 error = da9063_iic_select_page(sc, DA9063_IIC_PAGE(addr)); in da9063_iic_modify()
168 error = iicdev_readfrom(dev, DA9063_IIC_PAGE_OFF(addr), ®, 1, in da9063_iic_modify()
175 reg &= ~clear_mask; in da9063_iic_modify()
176 reg |= set_mask; in da9063_iic_modify()
178 error = iicdev_writeto(dev, DA9063_IIC_PAGE_OFF(addr), ®, 1, in da9063_iic_modify()
195 if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) in da9063_iic_probe()
207 uint8_t reg; in da9063_iic_attach() local
212 sc->dev = dev; in da9063_iic_attach()
214 error = iicdev_readfrom(dev, DA9063_PAGE_CON, ®, 1, IIC_WAIT); in da9063_iic_attach()
218 sc->page = ((reg >> DA9063_PAGE_CON_REG_PAGE_SHIFT) & in da9063_iic_attach()
220 mtx_init(&sc->mtx, device_get_nameunit(sc->dev), NULL, MTX_DEF); in da9063_iic_attach()
222 sc->simplebus_sc.flags |= SB_FLAG_NO_RANGES; in da9063_iic_attach()
239 mtx_destroy(&sc->mtx); in da9063_iic_detach()