Commit c5289435 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'for-6.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/pateldipen1984/linux

Pull hte/timestamp updates from Dipen Patel:

 - Improve comments in the translate function

 - Reflect the GPIOLIB API changes during calculation of the GPIO base

 - Improve error handling in Tegra test and provider drivers

 - Improve code to set the line name

* tag 'for-6.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/pateldipen1984/linux:
  hte: Use kasprintf() instead of fixed buffer formatting
  hte: tegra: Fix missing error code in tegra_hte_test_probe()
  hte: tegra194: Switch to LATE_SIMPLE_DEV_PM_OPS()
  hte: tegra194: Remove redundant dev_err()
  hte: tegra194: improve the GPIO-related comment
  hte: allow building modules with COMPILE_TEST enabled
  hte: Annotate struct hte_device with __counted_by
parents 59fff63c fc62d5e2
...@@ -16,7 +16,7 @@ if HTE ...@@ -16,7 +16,7 @@ if HTE
config HTE_TEGRA194 config HTE_TEGRA194
tristate "NVIDIA Tegra194 HTE Support" tristate "NVIDIA Tegra194 HTE Support"
depends on ARCH_TEGRA_194_SOC depends on (ARCH_TEGRA_194_SOC || COMPILE_TEST)
depends on GPIOLIB depends on GPIOLIB
help help
Enable this option for integrated hardware timestamping engine also Enable this option for integrated hardware timestamping engine also
...@@ -26,7 +26,7 @@ config HTE_TEGRA194 ...@@ -26,7 +26,7 @@ config HTE_TEGRA194
config HTE_TEGRA194_TEST config HTE_TEGRA194_TEST
tristate "NVIDIA Tegra194 HTE Test" tristate "NVIDIA Tegra194 HTE Test"
depends on HTE_TEGRA194 depends on (HTE_TEGRA194 || COMPILE_TEST)
help help
The NVIDIA Tegra194 GTE test driver demonstrates how to use HTE The NVIDIA Tegra194 GTE test driver demonstrates how to use HTE
framework to timestamp GPIO and LIC IRQ lines. framework to timestamp GPIO and LIC IRQ lines.
......
...@@ -153,8 +153,10 @@ static int tegra_hte_test_probe(struct platform_device *pdev) ...@@ -153,8 +153,10 @@ static int tegra_hte_test_probe(struct platform_device *pdev)
} }
cnt = of_hte_req_count(hte.pdev); cnt = of_hte_req_count(hte.pdev);
if (cnt < 0) if (cnt < 0) {
ret = cnt;
goto free_irq; goto free_irq;
}
dev_info(&pdev->dev, "Total requested lines:%d\n", cnt); dev_info(&pdev->dev, "Total requested lines:%d\n", cnt);
......
...@@ -407,12 +407,15 @@ static int tegra_hte_line_xlate(struct hte_chip *gc, ...@@ -407,12 +407,15 @@ static int tegra_hte_line_xlate(struct hte_chip *gc,
return -EINVAL; return -EINVAL;
/* /*
* GPIO consumers can access GPIOs in two ways:
* *
* There are two paths GPIO consumers can take as follows: * 1) Using the global GPIO numberspace.
* 1) The consumer (gpiolib-cdev for example) which uses GPIO global *
* number which gets assigned run time. * This is the old, now DEPRECATED method and should not be used in
* 2) The consumer passing GPIO from the DT which is assigned * new code. TODO: Check if tegra is even concerned by this.
* statically for example by using TEGRA194_AON_GPIO gpio DT binding. *
* 2) Using GPIO descriptors that can be assigned to consumer devices
* using device-tree, ACPI or lookup tables.
* *
* The code below addresses both the consumer use cases and maps into * The code below addresses both the consumer use cases and maps into
* HTE/GTE namespace. * HTE/GTE namespace.
...@@ -725,10 +728,8 @@ static int tegra_hte_probe(struct platform_device *pdev) ...@@ -725,10 +728,8 @@ static int tegra_hte_probe(struct platform_device *pdev)
return -ENOMEM; return -ENOMEM;
ret = platform_get_irq(pdev, 0); ret = platform_get_irq(pdev, 0);
if (ret < 0) { if (ret < 0)
dev_err_probe(dev, ret, "failed to get irq\n");
return ret; return ret;
}
hte_dev->hte_irq = ret; hte_dev->hte_irq = ret;
ret = devm_request_irq(dev, hte_dev->hte_irq, tegra_hte_isr, 0, ret = devm_request_irq(dev, hte_dev->hte_irq, tegra_hte_isr, 0,
dev_name(dev), hte_dev); dev_name(dev), hte_dev);
...@@ -811,7 +812,7 @@ static int tegra_hte_probe(struct platform_device *pdev) ...@@ -811,7 +812,7 @@ static int tegra_hte_probe(struct platform_device *pdev)
return 0; return 0;
} }
static int __maybe_unused tegra_hte_resume_early(struct device *dev) static int tegra_hte_resume_early(struct device *dev)
{ {
u32 i; u32 i;
struct tegra_hte_soc *gs = dev_get_drvdata(dev); struct tegra_hte_soc *gs = dev_get_drvdata(dev);
...@@ -832,7 +833,7 @@ static int __maybe_unused tegra_hte_resume_early(struct device *dev) ...@@ -832,7 +833,7 @@ static int __maybe_unused tegra_hte_resume_early(struct device *dev)
return 0; return 0;
} }
static int __maybe_unused tegra_hte_suspend_late(struct device *dev) static int tegra_hte_suspend_late(struct device *dev)
{ {
u32 i; u32 i;
struct tegra_hte_soc *gs = dev_get_drvdata(dev); struct tegra_hte_soc *gs = dev_get_drvdata(dev);
...@@ -852,15 +853,14 @@ static int __maybe_unused tegra_hte_suspend_late(struct device *dev) ...@@ -852,15 +853,14 @@ static int __maybe_unused tegra_hte_suspend_late(struct device *dev)
} }
static const struct dev_pm_ops tegra_hte_pm = { static const struct dev_pm_ops tegra_hte_pm = {
SET_LATE_SYSTEM_SLEEP_PM_OPS(tegra_hte_suspend_late, LATE_SYSTEM_SLEEP_PM_OPS(tegra_hte_suspend_late, tegra_hte_resume_early)
tegra_hte_resume_early)
}; };
static struct platform_driver tegra_hte_driver = { static struct platform_driver tegra_hte_driver = {
.probe = tegra_hte_probe, .probe = tegra_hte_probe,
.driver = { .driver = {
.name = "tegra_hte", .name = "tegra_hte",
.pm = &tegra_hte_pm, .pm = pm_sleep_ptr(&tegra_hte_pm),
.of_match_table = tegra_hte_of_match, .of_match_table = tegra_hte_of_match,
}, },
}; };
......
...@@ -17,8 +17,6 @@ ...@@ -17,8 +17,6 @@
#include <linux/debugfs.h> #include <linux/debugfs.h>
#include <linux/device.h> #include <linux/device.h>
#define HTE_TS_NAME_LEN 10
/* Global list of the HTE devices */ /* Global list of the HTE devices */
static DEFINE_SPINLOCK(hte_lock); static DEFINE_SPINLOCK(hte_lock);
static LIST_HEAD(hte_devices); static LIST_HEAD(hte_devices);
...@@ -88,7 +86,7 @@ struct hte_device { ...@@ -88,7 +86,7 @@ struct hte_device {
struct list_head list; struct list_head list;
struct hte_chip *chip; struct hte_chip *chip;
struct module *owner; struct module *owner;
struct hte_ts_info ei[]; struct hte_ts_info ei[] __counted_by(nlines);
}; };
#ifdef CONFIG_DEBUG_FS #ifdef CONFIG_DEBUG_FS
...@@ -389,13 +387,10 @@ static int __hte_req_ts(struct hte_ts_desc *desc, hte_ts_cb_t cb, ...@@ -389,13 +387,10 @@ static int __hte_req_ts(struct hte_ts_desc *desc, hte_ts_cb_t cb,
atomic_inc(&gdev->ts_req); atomic_inc(&gdev->ts_req);
ei->line_name = NULL; if (desc->attr.name)
if (!desc->attr.name) { ei->line_name = NULL;
ei->line_name = kzalloc(HTE_TS_NAME_LEN, GFP_KERNEL); else
if (ei->line_name) ei->line_name = kasprintf(GFP_KERNEL, "ts_%u", desc->attr.line_id);
scnprintf(ei->line_name, HTE_TS_NAME_LEN, "ts_%u",
desc->attr.line_id);
}
hte_ts_dbgfs_init(desc->attr.name == NULL ? hte_ts_dbgfs_init(desc->attr.name == NULL ?
ei->line_name : desc->attr.name, ei); ei->line_name : desc->attr.name, ei);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment