qcacmn: Add new QDF API's to handle gpio requirements

Add new QDF APIs to handle gpio, irqf and timer related
handling in TSF feature.

Change-Id: Iff6f85c6debe351c5533906559400b4a51333d4d
CRs-Fixed: 3469020
这个提交包含在:
Roopavathi Lingampalli
2023-03-24 13:16:20 +05:30
提交者 Madan Koyyalamudi
父节点 3a522a80e1
当前提交 36d5ce6684
修改 9 个文件,包含 385 行新增15 行删除

查看文件

@@ -60,6 +60,82 @@ qal_vbus_get_iorsc(int devnum, uint32_t flag, char *devname);
QDF_STATUS
qal_vbus_release_iorsc(int devnum);
/**
* qal_vbus_allocate_iorsc() - allocate io resource
* @pinnum: pin Number
* @label: pin name string
*
* This function will allocate the io resource for a device
*
* Return: QDF_STATUS_SUCCESS on success
*/
QDF_STATUS
qal_vbus_allocate_iorsc(unsigned int pinnum, const char *label);
/**
* qal_vbus_iorsc_dir_output() - set pin dirction to output
* @pin: pin Number
* @val: value
*
* This function set the gpio pin direction to output
*
* Return: 0 on success, error no on failure
*/
QDF_STATUS
qal_vbus_iorsc_dir_output(unsigned int pin, int val);
/**
* qal_vbus_iorsc_set_value() - set pin direction
* @pin: pin Number
* @val: value
*
* This function set the gpio pin direction based on value
*
* Return: QDF_STATUS_SUCCESS on success
*/
QDF_STATUS
qal_vbus_iorsc_set_value(unsigned int pin, int val);
/**
* qal_vbus_iorsc_toirq() - set irq number to gpio
* @pin: pin Number
*
* This function set the irq number to gpio pin
*
* Return: QDF_STATUS_SUCCESS on success
*/
QDF_STATUS
qal_vbus_iorsc_toirq(unsigned int pin);
/**
* qal_vbus_request_irq() - set interrupt handler
* @irqnum: irq Number
* @handler: function handler to be called
* @flags: irq flags
* @dev_name: device name
* @ctx: pointer to device context
* This function set up the handling of the interrupt
*
* Return: QDF_STATUS_SUCCESS on success, Error code on failure
*/
QDF_STATUS
qal_vbus_request_irq(unsigned int irqnum,
irqreturn_t (*handler)(int irq, void *arg),
unsigned long flags, const char *dev_name,
void *ctx);
/**
* __qal_vbus_free_irq() - free irq
* @irqnum: irq Number
* @ctx: pointer to device context
*
* This function free the irq number set to gpio pin
*
* Return: QDF_STATUS_SUCCESS on success
*/
static inline QDF_STATUS
__qal_vbus_free_irq(unsigned int irqnum, void *ctx);
/**
* qal_vbus_enable_devclk() - enable device clock
* @clk: Device clock
@@ -220,12 +296,50 @@ qal_vbus_get_iorsc(int devnum, uint32_t flag, char *devname)
return __qal_vbus_get_iorsc(devnum, flag, devname);
}
static inline QDF_STATUS
qal_vbus_allocate_iorsc(unsigned int pinnum, const char *label)
{
return __qal_vbus_allocate_iorsc(pinnum, label);
}
static inline QDF_STATUS
qal_vbus_iorsc_dir_output(unsigned int pin, int val)
{
return __qal_vbus_iorsc_dir_output(pin, val);
}
static inline QDF_STATUS
qal_vbus_iorsc_set_value(unsigned int pin, int val)
{
return __qal_vbus_iorsc_set_value(pin, val);
}
static inline QDF_STATUS
qal_vbus_release_iorsc(int devnum)
{
return __qal_vbus_release_iorsc(devnum);
}
static inline QDF_STATUS
qal_vbus_iorsc_toirq(unsigned int pin)
{
return __qal_vbus_iorsc_toirq(pin);
}
static inline QDF_STATUS
qal_vbus_request_irq(unsigned int irqnum,
irqreturn_t (*handler)(int irq, void *arg),
unsigned long flags, const char *dev_name, void *ctx)
{
return __qal_vbus_request_irq(irqnum, handler, flags, dev_name, ctx);
}
static inline QDF_STATUS
qal_vbus_free_irq(unsigned int irqnum, void *ctx)
{
return __qal_vbus_free_irq(irqnum, ctx);
}
static inline QDF_STATUS
qal_vbus_enable_devclk(struct qdf_dev_clk *clk)
{
@@ -310,5 +424,4 @@ qal_vbus_rcu_read_unlock(void)
return __qal_vbus_rcu_read_unlock();
}
#endif
#endif /* __QAL_VBUS_DEV_H */

查看文件

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -76,6 +77,117 @@ __qal_vbus_release_iorsc(int devnum)
return QDF_STATUS_SUCCESS;
}
/**
* __qal_vbus_allocate_iorsc() - allocate io resource
* @pinnum: pin Number
* @label: name of pin
*
* This function will allocate io resource
*
* Return: QDF_STATUS_SUCCESS on success
*/
static inline QDF_STATUS
__qal_vbus_allocate_iorsc(unsigned int pinnum, const char *label)
{
int ret;
ret = gpio_request(pinnum, label);
return qdf_status_from_os_return(ret);
}
/**
* __qal_vbus_iorsc_dir_output() - set pin dirction to output
* @pin: pin Number
* @val: value
*
* This function set the gpio pin direction to output
*
* Return: 0 on success, error no on failure
*/
static inline QDF_STATUS
__qal_vbus_iorsc_dir_output(unsigned int pin, int val)
{
int ret;
ret = gpio_direction_output(pin, val);
return qdf_status_from_os_return(ret);
}
/**
* __qal_vbus_iorsc_set_value() - set pin direction
* @pin: pin Number
* @val: value
*
* This function set the gpio pin direction based on value
*
* Return: QDF_STATUS_SUCCESS on success
*/
static inline QDF_STATUS
__qal_vbus_iorsc_set_value(unsigned int pin, int val)
{
gpio_set_value(pin, val);
return QDF_STATUS_SUCCESS;
}
/**
* __qal_vbus_iorsc_toirq() - set irq number to gpio
* @pin: pin Number
*
* This function set the irq number to gpio pin
*
* Return: QDF_STATUS_SUCCESS on success
*/
static inline QDF_STATUS
__qal_vbus_iorsc_toirq(unsigned int pin)
{
int ret;
ret = gpio_to_irq(pin);
return qdf_status_from_os_return(ret);
}
/**
* __qal_vbus_request_irq() - set interrupt handler
* @irqnum: irq Number
* @handler: function handler to be called
* @flags: irq flags
* @dev_name: device name
* @ctx: pointer to device context
*
* This function set up the handling of the interrupt
*
* Return: QDF_STATUS_SUCCESS on success, Error code on failure
*/
static inline QDF_STATUS
__qal_vbus_request_irq(unsigned int irqnum,
irqreturn_t (*handler)(int irq, void *arg),
unsigned long flags, const char *dev_name, void *ctx)
{
int ret;
ret = request_irq(irqnum, handler, flags, dev_name, ctx);
return qdf_status_from_os_return(ret);
}
/**
* __qal_vbus_free_irq() - free irq
* @irqnum: irq Number
* @ctx: pointer to device context
*
* This function free the irq number set to gpio pin
*
* Return: QDF_STATUS_SUCCESS on success
*/
static inline QDF_STATUS
__qal_vbus_free_irq(unsigned int irqnum, void *ctx)
{
free_irq(irqnum, ctx);
return QDF_STATUS_SUCCESS;
}
/**
* __qal_vbus_enable_devclk() - enable device clock
* @clk: Device clock

查看文件

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -49,4 +50,9 @@
#define QDF_IRQ_IS_POLLED __QDF_IRQ_IS_POLLED
#define QDF_IRQ_DISABLE_UNLAZY __QDF_IRQ_DISABLE_UNLAZY
#define QDF_IRQF_SHARED __QDF_IRQF_SHARED
#define QDF_IRQF_TRIGGER_RISING __QDF_IRQF_TRIGGER_RISING
#define QDF_IRQ_NONE __QDF_IRQ_NONE
#define QDF_IRQ_HANDLED __QDF_IRQ_HANDLED
#endif /* __QDF_IRQ_H */

查看文件

@@ -102,7 +102,31 @@ int64_t qdf_ktime_to_us(qdf_ktime_t ktime);
int64_t qdf_ktime_to_ns(qdf_ktime_t ktime);
/**
* qdf_system_ticks() - Count the number of ticks elapsed from the time when
* qdf_time_ktime_set() - Set a ktime_t variable from a seconds/nanoseconds
* value
* @secs: seconds to set
* @nsecs: nanoseconds to set
*
* Return: The qdf_ktime_t representation of the value.
*/
qdf_ktime_t qdf_time_ktime_set(const s64 secs, const unsigned long nsecs);
/**
* qdf_ktime_get_real_ns() - Gets the current time in ns using UTC
*
* Return: qdf_ktime_t in nano sec
*/
qdf_ktime_t qdf_ktime_get_real_ns(void);
/**
* qdf_ktime_get_ns() - Gets the current time nano seconds
*
* Return: qdf_ktime_t in nano sec
*/
qdf_ktime_t qdf_ktime_get_ns(void);
/**
* qdf_system_ticks - Count the number of ticks elapsed from the time when
* the system booted
*
* Return: ticks
@@ -283,50 +307,80 @@ void qdf_time_ktime_get_real_time(qdf_timespec_t *ts);
* Return: current time in nanosec units.
*/
unsigned long long qdf_time_sched_clock(void);
#else
/**
* qdf_usleep_range - introduce sleep with min and max time
* @min: Minimum time in usecs to sleep
* @max: Maximum time in usecs to sleep
*
* Return: none
*/
void qdf_usleep_range(unsigned long min, unsigned long max);
/**
* qdf_ktime_compare - compare two qdf_ktime_t objects
* @ktime1: time as qdf_ktime_t object
* @ktime2: time as qdf_ktime_t object
*
* Return:
* * ktime1 < ktime2 - return <0
* * ktime1 == ktime2 - return 0
* * ktime1 > ktime2 - return >0
*/
int qdf_ktime_compare(qdf_ktime_t ktime1, qdf_ktime_t ktime2);
#else
static inline qdf_ktime_t qdf_ns_to_ktime(uint64_t ns)
{
return __qdf_ns_to_ktime(ns);
}
static inline qdf_ktime_t qdf_ktime_add(qdf_ktime_t ktime1, qdf_ktime_t ktime2)
{
return __qdf_ktime_add(ktime1, ktime2);
}
static inline qdf_ktime_t qdf_ktime_get(void)
{
return __qdf_ktime_get();
}
static inline qdf_ktime_t qdf_ktime_real_get(void)
{
return __qdf_ktime_real_get();
}
static inline qdf_ktime_t qdf_ktime_get_real_ns(void)
{
return __qdf_ktime_get_real_ns();
}
static inline uint64_t qdf_ktime_get_ns(void)
{
return __qdf_ktime_get_ns();
}
static inline qdf_ktime_t qdf_ktime_compare(qdf_ktime_t ktime1,
qdf_ktime_t ktime2)
{
return __qdf_ktime_compare(ktime1, ktime2);
}
static inline qdf_ktime_t qdf_ktime_add_ns(qdf_ktime_t ktime, int64_t ns)
{
return __qdf_ktime_add_ns(ktime, ns);
}
static inline int64_t qdf_ktime_to_ms(qdf_ktime_t ktime)
{
return __qdf_ktime_to_ms(ktime);
}
static inline int64_t qdf_ktime_to_us(qdf_ktime_t ktime)
{
return __qdf_time_ktime_to_us(ktime);
}
static inline int64_t qdf_ktime_to_ns(qdf_ktime_t ktime)
{
return __qdf_ktime_to_ns(ktime);
@@ -338,7 +392,6 @@ static inline qdf_time_t qdf_system_ticks(void)
}
#define qdf_system_ticks_per_sec __qdf_system_ticks_per_sec
static inline uint32_t qdf_system_ticks_to_msecs(unsigned long clock_ticks)
{
return __qdf_system_ticks_to_msecs(clock_ticks);
@@ -354,7 +407,6 @@ static inline qdf_time_t qdf_get_system_uptime(void)
return __qdf_get_system_uptime();
}
static inline uint64_t qdf_get_bootbased_boottime_ns(void)
{
return __qdf_get_bootbased_boottime_ns();
@@ -510,6 +562,10 @@ static inline unsigned long long qdf_time_sched_clock(void)
{
return __qdf_time_sched_clock();
}
#endif
static inline void qdf_usleep_range(unsigned long min, unsigned long max)
{
__qdf_usleep_range(min, max);
}
#endif
#endif

查看文件

@@ -57,6 +57,9 @@ typedef struct qdf_sglist {
#define QDF_MAX_SCATTER __QDF_MAX_SCATTER
#define QDF_NSEC_PER_MSEC __QDF_NSEC_PER_MSEC
#define QDF_NSEC_PER_USEC __QDF_NSEC_PER_USEC
#define QDF_USEC_PER_MSEC __QDF_USEC_PER_MSEC
#define QDF_NSEC_PER_SEC __QDF_NSEC_PER_SEC
/**
* QDF_SWAP_U16 - swap input u16 value

查看文件

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -25,6 +26,7 @@
#define _I_QDF_IRQ_H
#include <linux/irq.h>
#include <linux/irqreturn.h>
#define __QDF_IRQ_TYPE_NONE IRQ_TYPE_NONE
#define __QDF_IRQ_TYPE_EDGE_RISING IRQ_TYPE_EDGE_RISING
@@ -48,5 +50,9 @@
#define __QDF_IRQ_PER_CPU_DEVID IRQ_PER_CPU_DEVID
#define __QDF_IRQ_IS_POLLED IRQ_IS_POLLED
#define __QDF_IRQ_DISABLE_UNLAZY IRQ_DISABLE_UNLAZY
#define __QDF_IRQF_SHARED IRQF_SHARED
#define __QDF_IRQF_TRIGGER_RISING IRQF_TRIGGER_RISING
#define __QDF_IRQ_NONE IRQ_NONE
#define __QDF_IRQ_HANDLED IRQ_HANDLED
#endif /* _I_QDF_IRQ_H */

查看文件

@@ -103,6 +103,41 @@ static inline ktime_t __qdf_ktime_real_get(void)
return ktime_get_real();
}
/**
* __qdf_ktime_get_ns() - Gets the current time nano seconds
*
* Return: ktime in nano sec
*/
static inline ktime_t __qdf_ktime_get_ns(void)
{
return ktime_get_ns();
}
/**
* __qdf_ktime_get_real_ns() - Gets the current time in ns using UTC
*
* Return: ktime in nano sec
*/
static inline ktime_t __qdf_ktime_get_real_ns(void)
{
return ktime_get_real_ns();
}
/**
* __qdf_ktime_compare - compare two qdf_ktime_t objects
* @ktime1: time as qdf_ktime_t object
* @ktime2: time as qdf_ktime_t object
*
* Return:
* * ktime1 < ktime2 - return <0
* * ktime1 == ktime2 - return 0
* * ktime1 > ktime2 - return >0
*/
static inline int __qdf_ktime_compare(ktime_t ktime1, ktime_t ktime2)
{
return ktime_compare(ktime1, ktime2);
}
/**
* __qdf_ktime_add_ns() - Adds ktime object and nanoseconds value and
* returns the ktime object
@@ -138,7 +173,6 @@ static inline int64_t __qdf_ktime_to_ms(ktime_t ktime)
return ktime_to_ms(ktime);
}
/**
* __qdf_system_ticks() - get system ticks
*
@@ -150,7 +184,6 @@ static inline __qdf_time_t __qdf_system_ticks(void)
}
#define __qdf_system_ticks_per_sec HZ
/**
* __qdf_system_ticks_to_msecs() - convert system ticks into milli seconds
* @ticks: System ticks
@@ -304,7 +337,6 @@ static inline uint64_t __qdf_get_monotonic_boottime(void)
}
#if defined (MSM_PLATFORM)
/**
* __qdf_get_log_timestamp() - get msm timer ticks
*
@@ -474,4 +506,8 @@ static inline void __qdf_time_ktime_get_real_time(__qdf_timespec_t *ts)
}
#endif
static inline void __qdf_usleep_range(unsigned long min, unsigned long max)
{
usleep_range(min, max);
}
#endif

查看文件

@@ -142,6 +142,9 @@ typedef unsigned long __sgtable_t;
*/
#define __QDF_MAX_SCATTER 1
#define __QDF_NSEC_PER_MSEC NSEC_PER_MSEC
#define __QDF_NSEC_PER_USEC NSEC_PER_USEC
#define __QDF_USEC_PER_MSEC USEC_PER_MSEC
#define __QDF_NSEC_PER_SEC NSEC_PER_SEC
#if defined(__LITTLE_ENDIAN_BITFIELD)
#define QDF_LITTLE_ENDIAN_MACHINE

查看文件

@@ -82,6 +82,13 @@ int64_t qdf_ktime_to_ns(qdf_ktime_t ktime)
qdf_export_symbol(qdf_ktime_to_ns);
qdf_ktime_t qdf_time_ktime_set(const s64 secs, const unsigned long nsecs)
{
return __qdf_time_ktime_set(secs, nsecs);
}
qdf_export_symbol(qdf_time_ktime_set);
qdf_time_t qdf_system_ticks(void)
{
return __qdf_system_ticks();
@@ -249,3 +256,31 @@ unsigned long long qdf_time_sched_clock(void)
}
qdf_export_symbol(qdf_time_sched_clock);
void qdf_usleep_range(unsigned long min, unsigned long max)
{
__qdf_usleep_range(min, max);
}
qdf_export_symbol(qdf_usleep_range);
qdf_ktime_t qdf_ktime_get_ns(void)
{
return __qdf_ktime_get_ns();
}
qdf_export_symbol(qdf_ktime_get_ns);
qdf_ktime_t qdf_ktime_get_real_ns(void)
{
return __qdf_ktime_get_real_ns();
}
qdf_export_symbol(qdf_ktime_get_real_ns);
int qdf_ktime_compare(qdf_ktime_t ktime1, qdf_ktime_t ktime2)
{
return __qdf_ktime_compare(ktime1, ktime2);
}
qdf_export_symbol(qdf_ktime_compare);