[PATCH v4 08/13] net: ethernet: oa_tc6: Replace open-coded parity calculation with parity_odd()

Kuan-Wei Chiu
2025-04-09T15:46:06Z

Refactor parity calculations to use the standard parity_odd() helper.
This change eliminates redundant implementations.

Co-developed-by: Yu-Chun Lin <eleanor15x@gmail.com>
Signed-off-by: Yu-Chun Lin <eleanor15x@gmail.com>
Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
---
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..6734b49357e7 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));
+ !parity_odd(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, !parity_odd(header));

return cpu_to_be32(header);
}
--
2.34.1