Refactor parity calculations to use the standard parity32() helper.
This change eliminates redundant implementations and improves code
efficiency.

Co-developed-by: Yu-Chun Lin <eleanor...@gmail.com>
Signed-off-by: Yu-Chun Lin <eleanor...@gmail.com>
Signed-off-by: Kuan-Wei Chiu <visitor...@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..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

Reply via email to