53 lines
1.2 KiB
C
53 lines
1.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (C) 2024 Rockchip Electronics Co., Ltd.
|
|
*
|
|
*/
|
|
#ifndef __MAXIM2C_COMPACT_H__
|
|
#define __MAXIM2C_COMPACT_H__
|
|
|
|
#include <linux/version.h>
|
|
|
|
#if KERNEL_VERSION(5, 10, 0) > LINUX_VERSION_CODE
|
|
enum rkmodule_pad_type {
|
|
PAD0,
|
|
PAD1,
|
|
PAD2,
|
|
PAD3,
|
|
PAD_MAX,
|
|
};
|
|
|
|
#ifndef fallthrough
|
|
#define fallthrough
|
|
#endif
|
|
|
|
#ifndef read_poll_timeout
|
|
#define read_poll_timeout(op, val, cond, sleep_us, timeout_us, \
|
|
sleep_before_read, args...) \
|
|
{ \
|
|
u64 __timeout_us = (timeout_us); \
|
|
unsigned long __sleep_us = (sleep_us); \
|
|
ktime_t __timeout = ktime_add_us(ktime_get(), __timeout_us); \
|
|
might_sleep_if((__sleep_us) != 0); \
|
|
if (sleep_before_read && __sleep_us) \
|
|
usleep_range((__sleep_us >> 2) + 1, __sleep_us); \
|
|
for (;;) { \
|
|
(val) = op(args); \
|
|
if (cond) \
|
|
break; \
|
|
if (__timeout_us && \
|
|
ktime_compare(ktime_get(), __timeout) > 0) { \
|
|
(val) = op(args); \
|
|
break; \
|
|
} \
|
|
if (__sleep_us) \
|
|
usleep_range((__sleep_us >> 2) + 1, __sleep_us); \
|
|
cpu_relax(); \
|
|
} \
|
|
(cond) ? 0 : -ETIMEDOUT; \
|
|
}
|
|
#endif /* read_poll_timeout */
|
|
#endif /* LINUX_VERSION_CODE */
|
|
|
|
#endif /* __MAXIM2C_COMPACT_H__ */
|