Refactor parity calculations to use the standard parity32() helper. This change eliminates redundant implementations and improves code efficiency. Co-developed-by: Yu-Chun Lin <eleanor15x@xxxxxxxxx> Signed-off-by: Yu-Chun Lin <eleanor15x@xxxxxxxxx> Signed-off-by: Kuan-Wei Chiu <visitorckw@xxxxxxxxx> --- drivers/net/ethernet/oa_tc6.c | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/drivers/net/ethernet/oa_tc6.c b/drivers/net/ethernet/oa_tc6.c index db200e4ec284..f02dba7b89a1 100644 --- a/drivers/net/ethernet/oa_tc6.c +++ b/drivers/net/ethernet/oa_tc6.c @@ -6,6 +6,7 @@ */ #include <linux/bitfield.h> +#include <linux/bitops.h> #include <linux/iopoll.h> #include <linux/mdio.h> #include <linux/phy.h> @@ -177,19 +178,6 @@ static int oa_tc6_spi_transfer(struct oa_tc6 *tc6, return spi_sync(tc6->spi, &msg); } -static int oa_tc6_get_parity(u32 p) -{ - /* Public domain code snippet, lifted from - * http://www-graphics.stanford.edu/~seander/bithacks.html - */ - p ^= p >> 1; - p ^= p >> 2; - p = (p & 0x11111111U) * 0x11111111U; - - /* Odd parity is used here */ - return !((p >> 28) & 1); -} - static __be32 oa_tc6_prepare_ctrl_header(u32 addr, u8 length, enum oa_tc6_register_op reg_op) { @@ -202,7 +190,7 @@ static __be32 oa_tc6_prepare_ctrl_header(u32 addr, u8 length, FIELD_PREP(OA_TC6_CTRL_HEADER_ADDR, addr) | FIELD_PREP(OA_TC6_CTRL_HEADER_LENGTH, length - 1); header |= FIELD_PREP(OA_TC6_CTRL_HEADER_PARITY, - oa_tc6_get_parity(header)); + !parity32(header)); return cpu_to_be32(header); } @@ -940,8 +928,7 @@ static __be32 oa_tc6_prepare_data_header(bool data_valid, bool start_valid, FIELD_PREP(OA_TC6_DATA_HEADER_END_BYTE_OFFSET, end_byte_offset); - header |= FIELD_PREP(OA_TC6_DATA_HEADER_PARITY, - oa_tc6_get_parity(header)); + header |= FIELD_PREP(OA_TC6_DATA_HEADER_PARITY, !parity32(header)); return cpu_to_be32(header); } -- 2.34.1