From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 042E927A925 for ; Sat, 30 Aug 2025 11:09:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.41 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756552195; cv=none; b=pmxsNWOp6gM5NwR+lahufgvLm0X9LhUpi248iC1l/Yx0uvQ8teBLYTGSB77yzgF8ZJm1jLHNVg6v6WmM1DauWm6EFyiwk+i8Lcji6d3xt4gmSlxSR0rg0lmiT5wdfjyi8ynDPVLYp9ZNp+z3qgNkvElHlKpCnnblpdyJxhQ/Ufg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756552195; c=relaxed/simple; bh=zHCa9J6rlUOO7tYPrfj8IXJe6YbyYyv4K6ql9TPqD00=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CDbUEcsHu5cuwWb6emlA+uLhCmzCn+x13gLWeOzzukY++3qi5FNPWmuKywFeikoekt8RqkhqgPVlN8MczU9HMoA1czL9wlRg1U0dO/rNIUmd4VbUrNKz2QE9ghTf6577o37AAx88pa4rOymLSG5qddWidLvS7plxxy+PnguHyck= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=ophibfWr; arc=none smtp.client-ip=209.85.218.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="ophibfWr" Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-afe7f9fdb96so37272966b.2 for ; Sat, 30 Aug 2025 04:09:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1756552191; x=1757156991; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=8nB6GsrC3suUPGYnBxDulbpNmOH6mvKZMR5+BvK4sW4=; b=ophibfWrlkqzIkynyFnRvXBcrZJhobIAs04kHa6AVtynq/f1vpSJrUGDkW5JndvTCj Sur0EOuJqqNzfkDXKNormw4ICtFQwkejxNXsMtY4FkHgwoPnKnw3wa6MQzAaa5R2In6k r8O/A/YT6G6lXkUs7wUghn3t9+Xl0OOQYm+TmKTYyjFg2HpnZP9M0vrxzTiIQdEya+BE txsCmZTGP50IJs1pLmncVtLPd9mGYSsQ8Tk8XXZ7r+conYKdJ4/HR1BZdku1OKjiOPhd Z8jIh6ZEM71NwM2DOy6QkAC3p4uVU+ta9QYvCnYGdcXT7OyBkn4QDF/uQMz4PKiZAsx0 VQgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756552191; x=1757156991; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8nB6GsrC3suUPGYnBxDulbpNmOH6mvKZMR5+BvK4sW4=; b=kNMC8IDWZQTwzhQHORkKZBfYw8rHzKMZ/OUdm0Nqmcn8CRq29eQqn+viUTRkJJujma LkvirYKmnSp6sl7yjynX7aPxh2PO/AiQY338yArv+IxcU1ZJyMmmRYPm4+0zw7mlrje3 /WY/Fg2HFFHgqROTWfqtHaoRBmHpetWDsvVmsdcMPdi7CWMd6qKaab+jZwcusTquAu7l dkgaJKLWsdpRm6fcX7o3g0vpzPGgmhbLoR1WUbdOKYlhYvBGzagtOnBNChZegAVOWpg1 xKacVbOc2clMUQ9A9veWaKn0uoke4qIQS72t31HzY00yz+m1eiFCaKP5euHYipCBuHa/ rYeg== X-Forwarded-Encrypted: i=1; AJvYcCUuwLijH7cRWA+htKX+pInlGDf5xLmrN5MIQ5ZvP2CMObQS6acYxLYXyizIxcMvE/27kGeiKpx02VHZnN0=@vger.kernel.org X-Gm-Message-State: AOJu0Ywfjq+w2KqkTAQONR3i/Qe5zDOCBC7Zj7BjyMhcwfolgwgMHNm4 +lZyc2Y5Sz7rfVubVFhfN3/tqOFedfP7jNaW+le+cZa3MT5NsQxHTovzVtXlZa4L1DbQ0bHePIJ mascL X-Gm-Gg: ASbGnctNQplwhujO+18UERUTzAN3Flcu2FW6cLo0fqg6MeltWTUiui4CV7W/3EnshK/ BTMNdiT6uLrFAGR3g/U6FJa19Bqoxk1B6Epyv8zNQhKCJ4QRZXw8WOvrK9K74zYXmQ9xX2q4jII Jq5+LfwM630aiKMxmyWz4bDvu1Lhtf1rDmyHfb7uoSliANeJksqvov3JFu8dUSkPzGcwzyiDwJ/ u1sAbqGywFnH9a6fEq9n9hDzLeiv+6N9NlM9f0CLWm1j0OzfJMq+1YSepENEpupvmArf+HZ+1xi 8JIpgmgx2irIGiOfK/QFOh3PT3KGspVMfsWnVI2cB50OuuEXhP2+E+gLE63dqZ2Tbv1bhXp7g1r oVuB5zyurn6LRjomRF0ZTN3C0+fLtbZ3B75sKX8our3VBhORGBQ== X-Google-Smtp-Source: AGHT+IEwQjzrWdjkIQWH/5UdCAnPAwyzuWU85HpS7f8tCUYr19Z6zEYlEC4pDnHs7fe5Ih6Mw5O/gw== X-Received: by 2002:a05:6402:13d0:b0:61c:cfb2:b2ce with SMTP id 4fb4d7f45d1cf-61d0d5f339cmr2022257a12.7.1756552191100; Sat, 30 Aug 2025 04:09:51 -0700 (PDT) Received: from [127.0.1.1] ([178.197.219.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-61cfc21542asm3285666a12.18.2025.08.30.04.09.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 Aug 2025 04:09:50 -0700 (PDT) From: Krzysztof Kozlowski Date: Sat, 30 Aug 2025 13:09:39 +0200 Subject: [PATCH 2/5] iio: adc: exynos_adc: Drop touchscreen support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20250830-s3c-cleanup-adc-v1-2-de54dfb1d9ea@linaro.org> References: <20250830-s3c-cleanup-adc-v1-0-de54dfb1d9ea@linaro.org> In-Reply-To: <20250830-s3c-cleanup-adc-v1-0-de54dfb1d9ea@linaro.org> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Krzysztof Kozlowski , Alim Akhtar , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-iio@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Krzysztof Kozlowski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=9603; i=krzysztof.kozlowski@linaro.org; h=from:subject:message-id; bh=zHCa9J6rlUOO7tYPrfj8IXJe6YbyYyv4K6ql9TPqD00=; b=owEBbQKS/ZANAwAKAcE3ZuaGi4PXAcsmYgBostv1Mf6SzYbmRYQ4l+395X7N5CPcC5zur7+7B o/VR8OOdPyJAjMEAAEKAB0WIQTd0mIoPREbIztuuKjBN2bmhouD1wUCaLLb9QAKCRDBN2bmhouD 10cMD/0VprNv1zGvyBDDUhs3p15+vnw3XyDMIDTTn/LzRmGTZfuZ7ZPnvmruBq3ekIZwSLKbUO3 CHYak8y9aG0inxirN26ysoNlRTNhAq4M1Hn8yWQNWUKWFoY3zCBNlD17uXaXiovJdvI0soVQnr6 5TZVkOn/f8WyDa1lNNheZFWm25R1CqCxo6vocJcdytINkj1+xRWrZEr1SS28t8GAbyIp2XD/MK5 3KXmGkDGp0k3Tfkw6W8PWSGosEA59bWPJxI6q8WBAafUt66b6r8xLkUhMKA1IuWHlWjEHSe7j6x 9y6yC5gtCROG+hATEXkYv1eYNl/Lv2kDII44RTcRnSpkoekLq5qFb1y90GvOumyOH6Kfx++uZ7+ HLvNPsFWieBmWpTk6qNGEvPHiq4JpQoflHGAgkhUGIdC09fW22+Vbf6ZWFEHAwmdOaQ6nrboMLn y/7aFkjhmuMd1kBCn7OGMWY/TOOwojBwbtTA5BxArA8f0gU/wvqsbU8em00waArBGZTsSbyo7Bw WvQjHTFAJQAsRdg7IkUtf9Celey3Z2eDn4AJEU/+cd8XNi8QDF/gVg7neL+zVPebQEMAGmAXj3v j7MfIYPMMH5+PiezHfOB8wuYIBCCpLowAJx1RuBTPP40Lc9vbQqJ6k8NGvCGoNBQHESi3/YXKt2 sDtjtNSKJpT+XJQ== X-Developer-Key: i=krzysztof.kozlowski@linaro.org; a=openpgp; fpr=9BD07E0E0C51F8D59677B7541B93437D3B41629B With last user of touchscreen via ADC (S3C24xx SoC) gone, drop the remaining code from Samsung SoC ADC driver. Signed-off-by: Krzysztof Kozlowski --- drivers/iio/adc/exynos_adc.c | 196 +------------------------------------------ 1 file changed, 1 insertion(+), 195 deletions(-) diff --git a/drivers/iio/adc/exynos_adc.c b/drivers/iio/adc/exynos_adc.c index 17fd33c6bd6d0dcf41771331ecb328e58d820ed0..30f6d8436e775a8d2177951b436cd45152307ea2 100644 --- a/drivers/iio/adc/exynos_adc.c +++ b/drivers/iio/adc/exynos_adc.c @@ -19,11 +19,9 @@ #include #include #include -#include #include #include #include -#include #include #include @@ -35,14 +33,12 @@ /* S3C/EXYNOS4412/5250 ADC_V1 registers definitions */ #define ADC_V1_CON(x) ((x) + 0x00) -#define ADC_V1_TSC(x) ((x) + 0x04) #define ADC_V1_DLY(x) ((x) + 0x08) #define ADC_V1_DATX(x) ((x) + 0x0C) #define ADC_V1_DATY(x) ((x) + 0x10) #define ADC_V1_UPDN(x) ((x) + 0x14) #define ADC_V1_INTCLR(x) ((x) + 0x18) #define ADC_V1_MUX(x) ((x) + 0x1c) -#define ADC_V1_CLRINTPNDNUP(x) ((x) + 0x20) /* Future ADC_V2 registers definitions */ #define ADC_V2_CON1(x) ((x) + 0x00) @@ -61,17 +57,12 @@ /* Bit definitions for S3C2410 / S3C6410 ADC */ #define ADC_S3C2410_CON_SELMUX(x) (((x) & 7) << 3) -/* touch screen always uses channel 0 */ -#define ADC_S3C2410_MUX_TS 0 - /* ADCTSC Register Bits */ #define ADC_S3C2443_TSC_UD_SEN (1u << 8) #define ADC_S3C2410_TSC_YM_SEN (1u << 7) #define ADC_S3C2410_TSC_YP_SEN (1u << 6) #define ADC_S3C2410_TSC_XM_SEN (1u << 5) #define ADC_S3C2410_TSC_XP_SEN (1u << 4) -#define ADC_S3C2410_TSC_PULL_UP_DISABLE (1u << 3) -#define ADC_S3C2410_TSC_AUTO_PST (1u << 2) #define ADC_S3C2410_TSC_XY_PST(x) (((x) & 0x3) << 0) #define ADC_TSC_WAIT4INT (ADC_S3C2410_TSC_YM_SEN | \ @@ -79,12 +70,6 @@ ADC_S3C2410_TSC_XP_SEN | \ ADC_S3C2410_TSC_XY_PST(3)) -#define ADC_TSC_AUTOPST (ADC_S3C2410_TSC_YM_SEN | \ - ADC_S3C2410_TSC_YP_SEN | \ - ADC_S3C2410_TSC_XP_SEN | \ - ADC_S3C2410_TSC_AUTO_PST | \ - ADC_S3C2410_TSC_XY_PST(0)) - /* Bit definitions for ADC_V2 */ #define ADC_V2_CON1_SOFT_RESET (1u << 2) @@ -116,13 +101,11 @@ struct exynos_adc { struct exynos_adc_data *data; struct device *dev; - struct input_dev *input; void __iomem *regs; struct regmap *pmu_map; struct clk *clk; struct clk *sclk; unsigned int irq; - unsigned int tsirq; unsigned int delay; struct regulator *vdd; @@ -131,12 +114,6 @@ struct exynos_adc { u32 value; unsigned int version; - bool ts_enabled; - - bool read_ts; - u32 ts_x; - u32 ts_y; - /* * Lock to protect from potential concurrent access to the * completion callback during a manual conversion. For this driver @@ -507,55 +484,13 @@ static int exynos_read_raw(struct iio_dev *indio_dev, return ret; } -static int exynos_read_s3c64xx_ts(struct iio_dev *indio_dev, int *x, int *y) -{ - struct exynos_adc *info = iio_priv(indio_dev); - unsigned long time_left; - int ret; - - mutex_lock(&info->lock); - info->read_ts = true; - - reinit_completion(&info->completion); - - writel(ADC_S3C2410_TSC_PULL_UP_DISABLE | ADC_TSC_AUTOPST, - ADC_V1_TSC(info->regs)); - - /* Select the ts channel to be used and Trigger conversion */ - info->data->start_conv(info, ADC_S3C2410_MUX_TS); - - time_left = wait_for_completion_timeout(&info->completion, - EXYNOS_ADC_TIMEOUT); - if (time_left == 0) { - dev_warn(&indio_dev->dev, "Conversion timed out! Resetting\n"); - if (info->data->init_hw) - info->data->init_hw(info); - ret = -ETIMEDOUT; - } else { - *x = info->ts_x; - *y = info->ts_y; - ret = 0; - } - - info->read_ts = false; - mutex_unlock(&info->lock); - - return ret; -} - static irqreturn_t exynos_adc_isr(int irq, void *dev_id) { struct exynos_adc *info = dev_id; u32 mask = info->data->mask; /* Read value */ - if (info->read_ts) { - info->ts_x = readl(ADC_V1_DATX(info->regs)); - info->ts_y = readl(ADC_V1_DATY(info->regs)); - writel(ADC_TSC_WAIT4INT | ADC_S3C2443_TSC_UD_SEN, ADC_V1_TSC(info->regs)); - } else { - info->value = readl(ADC_V1_DATX(info->regs)) & mask; - } + info->value = readl(ADC_V1_DATX(info->regs)) & mask; /* clear irq */ if (info->data->clear_irq) @@ -566,46 +501,6 @@ static irqreturn_t exynos_adc_isr(int irq, void *dev_id) return IRQ_HANDLED; } -/* - * Here we (ab)use a threaded interrupt handler to stay running - * for as long as the touchscreen remains pressed, we report - * a new event with the latest data and then sleep until the - * next timer tick. This mirrors the behavior of the old - * driver, with much less code. - */ -static irqreturn_t exynos_ts_isr(int irq, void *dev_id) -{ - struct exynos_adc *info = dev_id; - struct iio_dev *dev = dev_get_drvdata(info->dev); - u32 x, y; - bool pressed; - int ret; - - while (READ_ONCE(info->ts_enabled)) { - ret = exynos_read_s3c64xx_ts(dev, &x, &y); - if (ret == -ETIMEDOUT) - break; - - pressed = x & y & ADC_DATX_PRESSED; - if (!pressed) { - input_report_key(info->input, BTN_TOUCH, 0); - input_sync(info->input); - break; - } - - input_report_abs(info->input, ABS_X, x & ADC_DATX_MASK); - input_report_abs(info->input, ABS_Y, y & ADC_DATY_MASK); - input_report_key(info->input, BTN_TOUCH, 1); - input_sync(info->input); - - usleep_range(1000, 1100); - } - - writel(0, ADC_V1_CLRINTPNDNUP(info->regs)); - - return IRQ_HANDLED; -} - static int exynos_adc_reg_access(struct iio_dev *indio_dev, unsigned reg, unsigned writeval, unsigned *readval) @@ -657,70 +552,12 @@ static int exynos_adc_remove_devices(struct device *dev, void *c) return 0; } -static int exynos_adc_ts_open(struct input_dev *dev) -{ - struct exynos_adc *info = input_get_drvdata(dev); - - WRITE_ONCE(info->ts_enabled, true); - enable_irq(info->tsirq); - - return 0; -} - -static void exynos_adc_ts_close(struct input_dev *dev) -{ - struct exynos_adc *info = input_get_drvdata(dev); - - WRITE_ONCE(info->ts_enabled, false); - disable_irq(info->tsirq); -} - -static int exynos_adc_ts_init(struct exynos_adc *info) -{ - int ret; - - if (info->tsirq <= 0) - return -ENODEV; - - info->input = input_allocate_device(); - if (!info->input) - return -ENOMEM; - - info->input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); - info->input->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); - - input_set_abs_params(info->input, ABS_X, 0, 0x3FF, 0, 0); - input_set_abs_params(info->input, ABS_Y, 0, 0x3FF, 0, 0); - - info->input->name = "S3C24xx TouchScreen"; - info->input->id.bustype = BUS_HOST; - info->input->open = exynos_adc_ts_open; - info->input->close = exynos_adc_ts_close; - - input_set_drvdata(info->input, info); - - ret = input_register_device(info->input); - if (ret) { - input_free_device(info->input); - return ret; - } - - ret = request_threaded_irq(info->tsirq, NULL, exynos_ts_isr, - IRQF_ONESHOT | IRQF_NO_AUTOEN, - "touchscreen", info); - if (ret) - input_unregister_device(info->input); - - return ret; -} - static int exynos_adc_probe(struct platform_device *pdev) { struct exynos_adc *info = NULL; struct device_node *np = pdev->dev.of_node; struct s3c2410_ts_mach_info *pdata = dev_get_platdata(&pdev->dev); struct iio_dev *indio_dev = NULL; - bool has_ts = false; int ret; int irq; @@ -753,27 +590,10 @@ static int exynos_adc_probe(struct platform_device *pdev) } } - /* leave out any TS related code if unreachable */ - if (IS_REACHABLE(CONFIG_INPUT)) { - has_ts = of_property_read_bool(pdev->dev.of_node, - "has-touchscreen") || pdata; - } - irq = platform_get_irq(pdev, 0); if (irq < 0) return irq; info->irq = irq; - - if (has_ts) { - irq = platform_get_irq(pdev, 1); - if (irq == -EPROBE_DEFER) - return irq; - - info->tsirq = irq; - } else { - info->tsirq = -1; - } - info->dev = &pdev->dev; init_completion(&info->completion); @@ -842,11 +662,6 @@ static int exynos_adc_probe(struct platform_device *pdev) else info->delay = 10000; - if (has_ts) - ret = exynos_adc_ts_init(info); - if (ret) - goto err_iio; - ret = of_platform_populate(np, exynos_adc_match, NULL, &indio_dev->dev); if (ret < 0) { dev_err(&pdev->dev, "failed adding child nodes\n"); @@ -858,11 +673,6 @@ static int exynos_adc_probe(struct platform_device *pdev) err_of_populate: device_for_each_child(&indio_dev->dev, NULL, exynos_adc_remove_devices); - if (has_ts) { - input_unregister_device(info->input); - free_irq(info->tsirq, info); - } -err_iio: iio_device_unregister(indio_dev); err_irq: free_irq(info->irq, info); @@ -882,10 +692,6 @@ static void exynos_adc_remove(struct platform_device *pdev) struct iio_dev *indio_dev = platform_get_drvdata(pdev); struct exynos_adc *info = iio_priv(indio_dev); - if (IS_REACHABLE(CONFIG_INPUT) && info->input) { - free_irq(info->tsirq, info); - input_unregister_device(info->input); - } device_for_each_child(&indio_dev->dev, NULL, exynos_adc_remove_devices); iio_device_unregister(indio_dev); -- 2.48.1