12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- /* SPDX-License-Identifier: GPL-2.0 */
- /*
- * Copyright (C) 2021 MediaTek Inc.
- *
- * Author: Chunfeng Yun <[email protected]>
- */
- #ifndef __PHY_MTK_H__
- #define __PHY_MTK_H__
- #include <linux/bitfield.h>
- #include <linux/io.h>
- static inline void mtk_phy_clear_bits(void __iomem *reg, u32 bits)
- {
- u32 tmp = readl(reg);
- tmp &= ~bits;
- writel(tmp, reg);
- }
- static inline void mtk_phy_set_bits(void __iomem *reg, u32 bits)
- {
- u32 tmp = readl(reg);
- tmp |= bits;
- writel(tmp, reg);
- }
- static inline void mtk_phy_update_bits(void __iomem *reg, u32 mask, u32 val)
- {
- u32 tmp = readl(reg);
- tmp &= ~mask;
- tmp |= val & mask;
- writel(tmp, reg);
- }
- /* field @mask shall be constant and continuous */
- #define mtk_phy_update_field(reg, mask, val) \
- ({ \
- BUILD_BUG_ON_MSG(!__builtin_constant_p(mask), "mask is not constant"); \
- mtk_phy_update_bits(reg, mask, FIELD_PREP(mask, val)); \
- })
- #endif
|