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 QDF_STATUS
qal_vbus_release_iorsc(int devnum); 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 * qal_vbus_enable_devclk() - enable device clock
* @clk: 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); 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 static inline QDF_STATUS
qal_vbus_release_iorsc(int devnum) qal_vbus_release_iorsc(int devnum)
{ {
return __qal_vbus_release_iorsc(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 static inline QDF_STATUS
qal_vbus_enable_devclk(struct qdf_dev_clk *clk) 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(); return __qal_vbus_rcu_read_unlock();
} }
#endif #endif
#endif /* __QAL_VBUS_DEV_H */ #endif /* __QAL_VBUS_DEV_H */

查看文件

@@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved. * 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 * Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the * 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; 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 * __qal_vbus_enable_devclk() - enable device clock
* @clk: Device clock * @clk: Device clock

查看文件

@@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2021 The Linux Foundation. All rights reserved. * 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 * Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the * 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_IS_POLLED __QDF_IRQ_IS_POLLED
#define QDF_IRQ_DISABLE_UNLAZY __QDF_IRQ_DISABLE_UNLAZY #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 */ #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); 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 * the system booted
* *
* Return: ticks * Return: ticks
@@ -283,50 +307,80 @@ void qdf_time_ktime_get_real_time(qdf_timespec_t *ts);
* Return: current time in nanosec units. * Return: current time in nanosec units.
*/ */
unsigned long long qdf_time_sched_clock(void); 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) static inline qdf_ktime_t qdf_ns_to_ktime(uint64_t ns)
{ {
return __qdf_ns_to_ktime(ns); return __qdf_ns_to_ktime(ns);
} }
static inline qdf_ktime_t qdf_ktime_add(qdf_ktime_t ktime1, qdf_ktime_t ktime2) static inline qdf_ktime_t qdf_ktime_add(qdf_ktime_t ktime1, qdf_ktime_t ktime2)
{ {
return __qdf_ktime_add(ktime1, ktime2); return __qdf_ktime_add(ktime1, ktime2);
} }
static inline qdf_ktime_t qdf_ktime_get(void) static inline qdf_ktime_t qdf_ktime_get(void)
{ {
return __qdf_ktime_get(); return __qdf_ktime_get();
} }
static inline qdf_ktime_t qdf_ktime_real_get(void) static inline qdf_ktime_t qdf_ktime_real_get(void)
{ {
return __qdf_ktime_real_get(); 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) static inline qdf_ktime_t qdf_ktime_add_ns(qdf_ktime_t ktime, int64_t ns)
{ {
return __qdf_ktime_add_ns(ktime, ns); return __qdf_ktime_add_ns(ktime, ns);
} }
static inline int64_t qdf_ktime_to_ms(qdf_ktime_t ktime) static inline int64_t qdf_ktime_to_ms(qdf_ktime_t ktime)
{ {
return __qdf_ktime_to_ms(ktime); return __qdf_ktime_to_ms(ktime);
} }
static inline int64_t qdf_ktime_to_us(qdf_ktime_t ktime) static inline int64_t qdf_ktime_to_us(qdf_ktime_t ktime)
{ {
return __qdf_time_ktime_to_us(ktime); return __qdf_time_ktime_to_us(ktime);
} }
static inline int64_t qdf_ktime_to_ns(qdf_ktime_t ktime) static inline int64_t qdf_ktime_to_ns(qdf_ktime_t ktime)
{ {
return __qdf_ktime_to_ns(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 #define qdf_system_ticks_per_sec __qdf_system_ticks_per_sec
static inline uint32_t qdf_system_ticks_to_msecs(unsigned long clock_ticks) static inline uint32_t qdf_system_ticks_to_msecs(unsigned long clock_ticks)
{ {
return __qdf_system_ticks_to_msecs(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(); return __qdf_get_system_uptime();
} }
static inline uint64_t qdf_get_bootbased_boottime_ns(void) static inline uint64_t qdf_get_bootbased_boottime_ns(void)
{ {
return __qdf_get_bootbased_boottime_ns(); 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(); 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 #endif

查看文件

@@ -57,6 +57,9 @@ typedef struct qdf_sglist {
#define QDF_MAX_SCATTER __QDF_MAX_SCATTER #define QDF_MAX_SCATTER __QDF_MAX_SCATTER
#define QDF_NSEC_PER_MSEC __QDF_NSEC_PER_MSEC #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 * QDF_SWAP_U16 - swap input u16 value

查看文件

@@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2021 The Linux Foundation. All rights reserved. * 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 * Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the * any purpose with or without fee is hereby granted, provided that the
@@ -25,6 +26,7 @@
#define _I_QDF_IRQ_H #define _I_QDF_IRQ_H
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/irqreturn.h>
#define __QDF_IRQ_TYPE_NONE IRQ_TYPE_NONE #define __QDF_IRQ_TYPE_NONE IRQ_TYPE_NONE
#define __QDF_IRQ_TYPE_EDGE_RISING IRQ_TYPE_EDGE_RISING #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_PER_CPU_DEVID IRQ_PER_CPU_DEVID
#define __QDF_IRQ_IS_POLLED IRQ_IS_POLLED #define __QDF_IRQ_IS_POLLED IRQ_IS_POLLED
#define __QDF_IRQ_DISABLE_UNLAZY IRQ_DISABLE_UNLAZY #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 */ #endif /* _I_QDF_IRQ_H */

查看文件

@@ -103,6 +103,41 @@ static inline ktime_t __qdf_ktime_real_get(void)
return ktime_get_real(); 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 * __qdf_ktime_add_ns() - Adds ktime object and nanoseconds value and
* returns the ktime object * returns the ktime object
@@ -138,7 +173,6 @@ static inline int64_t __qdf_ktime_to_ms(ktime_t ktime)
return ktime_to_ms(ktime); return ktime_to_ms(ktime);
} }
/** /**
* __qdf_system_ticks() - get system ticks * __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 #define __qdf_system_ticks_per_sec HZ
/** /**
* __qdf_system_ticks_to_msecs() - convert system ticks into milli seconds * __qdf_system_ticks_to_msecs() - convert system ticks into milli seconds
* @ticks: System ticks * @ticks: System ticks
@@ -304,7 +337,6 @@ static inline uint64_t __qdf_get_monotonic_boottime(void)
} }
#if defined (MSM_PLATFORM) #if defined (MSM_PLATFORM)
/** /**
* __qdf_get_log_timestamp() - get msm timer ticks * __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 #endif
static inline void __qdf_usleep_range(unsigned long min, unsigned long max)
{
usleep_range(min, max);
}
#endif #endif

查看文件

@@ -142,6 +142,9 @@ typedef unsigned long __sgtable_t;
*/ */
#define __QDF_MAX_SCATTER 1 #define __QDF_MAX_SCATTER 1
#define __QDF_NSEC_PER_MSEC NSEC_PER_MSEC #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) #if defined(__LITTLE_ENDIAN_BITFIELD)
#define QDF_LITTLE_ENDIAN_MACHINE #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_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) qdf_time_t qdf_system_ticks(void)
{ {
return __qdf_system_ticks(); return __qdf_system_ticks();
@@ -249,3 +256,31 @@ unsigned long long qdf_time_sched_clock(void)
} }
qdf_export_symbol(qdf_time_sched_clock); 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);