/****************************************************************************** * * 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 /* struct dvobj_priv and etc. */ #include /* 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", __func__, 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", __func__); ret = _FAIL; } return ret; }