| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /******************************************************************************
- *
- * Copyright(c) 2015 - 2016 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- ******************************************************************************/
- #define _RTW_SDIO_C_
- #include <drv_types.h> /* struct dvobj_priv and etc. */
- #include <drv_types_sdio.h> /* RTW_SDIO_ADDR_CMD52_GEN */
- /*
- * Description:
- * Use SDIO cmd52 or cmd53 to read/write data
- *
- * Parameters:
- * d pointer of device object(struct dvobj_priv)
- * addr SDIO address, 17 bits
- * buf buffer for I/O
- * len length
- * write 0:read, 1:write
- * cmd52 0:cmd52, 1:cmd53
- *
- * Return:
- * _SUCCESS I/O ok.
- * _FAIL I/O fail.
- */
- static u8 sdio_io(struct dvobj_priv *d, u32 addr, void *buf, size_t len, u8 write, u8 cmd52)
- {
- int err;
- if (cmd52)
- addr = RTW_SDIO_ADDR_CMD52_GEN(addr);
- if (write)
- err = d->intf_ops->write(d, addr, buf, len, 0);
- else
- err = d->intf_ops->read(d, addr, buf, len, 0);
- if (err) {
- RTW_INFO("%s: [ERROR] %s FAIL! error(%d)\n",
- __FUNCTION__, write ? "write" : "read", err);
- return _FAIL;
- }
- return _SUCCESS;
- }
- u8 rtw_sdio_read_cmd52(struct dvobj_priv *d, u32 addr, void *buf, size_t len)
- {
- return sdio_io(d, addr, buf, len, 0, 1);
- }
- u8 rtw_sdio_read_cmd53(struct dvobj_priv *d, u32 addr, void *buf, size_t len)
- {
- return sdio_io(d, addr, buf, len, 0, 0);
- }
- u8 rtw_sdio_write_cmd52(struct dvobj_priv *d, u32 addr, void *buf, size_t len)
- {
- return sdio_io(d, addr, buf, len, 1, 1);
- }
- u8 rtw_sdio_write_cmd53(struct dvobj_priv *d, u32 addr, void *buf, size_t len)
- {
- return sdio_io(d, addr, buf, len, 1, 0);
- }
- u8 rtw_sdio_f0_read(struct dvobj_priv *d, u32 addr, void *buf, size_t len)
- {
- int err;
- u8 ret;
- ret = _SUCCESS;
- addr = RTW_SDIO_ADDR_F0_GEN(addr);
- err = d->intf_ops->read(d, addr, buf, len, 0);
- if (err) {
- RTW_INFO("%s: [ERROR] Read f0 register FAIL!\n", __FUNCTION__);
- ret = _FAIL;
- }
- return ret;
- }
|