From: Maxime Ripard <maxime.ripard@free-electrons.com> To: Quentin Schulz <quentin.schulz@free-electrons.com> Cc: jdelvare@suse.com, linux@roeck-us.net, jic23@kernel.org, knaack.h@gmx.de, lars@metafoo.de, pmeerw@pmeerw.net, wens@csie.org, lee.jones@linaro.org, linux-kernel@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-iio@vger.kernel.org, linux-arm-kernel@lists.infradead.org, thomas.petazzoni@free-electrons.com, antoine.tenart@free-electrons.com Subject: Re: [PATCH v2 2/4] iio: adc: add support for Allwinner SoCs ADC Date: Tue, 19 Jul 2016 14:40:51 +0200 [thread overview] Message-ID: <20160719124051.GB4107@lukather> (raw) In-Reply-To: <578DED17.7040309@free-electrons.com> [-- Attachment #1: Type: text/plain, Size: 3357 bytes --] On Tue, Jul 19, 2016 at 11:04:23AM +0200, Quentin Schulz wrote: > >> +/* TP_CTRL1 bits */ > >> +#define SUNXI_GPADC_STYLUS_UP_DEBOUNCE(x) ((x) << 12) /* 8 bits */ > >> +#define SUNXI_GPADC_STYLUS_UP_DEBOUNCE_EN BIT(9) > >> +#define SUNXI_GPADC_TOUCH_PAN_CALI_EN BIT(6) > >> +#define SUNXI_GPADC_TP_DUAL_EN BIT(5) > >> +#define SUNXI_GPADC_TP_MODE_EN BIT(4) > >> +#define SUNXI_GPADC_TP_ADC_SELECT BIT(3) > >> +#define SUNXI_GPADC_ADC_CHAN_SELECT(x) ((x) << 0) /* 3 bits */ > > > > Usually the comments are on the line above. However, if you really > > want to enforce something, you should rather mask the > > value. Otherwise, that comment is pretty useless. > > > > Do you mean something like that: > #define SUNXI_GPADC_ADC_CHAN_SELECT(x) (GENMASK(2,0) & x) ? Yes. > >> +/* TP_CTRL1 bits for sun6i SOCs */ > >> +#define SUNXI_GPADC_SUN6I_TOUCH_PAN_CALI_EN BIT(7) > >> +#define SUNXI_GPADC_SUN6I_TP_DUAL_EN BIT(6) > >> +#define SUNXI_GPADC_SUN6I_TP_MODE_EN BIT(5) > >> +#define SUNXI_GPADC_SUN6I_TP_ADC_SELECT BIT(4) > > > > Shouldn't that go in either a common define or the touchscreen driver? > > > > Then shouldn't I put all defines in a common header? (sunxi-gpadc-mfd.h) You should :) > >> + irq = regmap_irq_get_virq(sunxi_gpadc_mfd_dev->regmap_irqc, irq); > >> + ret = devm_request_any_context_irq(&pdev->dev, irq, > >> + sunxi_gpadc_fifo_data_irq_handler, > >> + 0, "fifo_data", info); > >> + if (ret < 0) { > >> + dev_err(&pdev->dev, > >> + "could not request FIFO_DATA_PENDING interrupt: %d\n", > >> + ret); > >> + goto err; > >> + } > >> + > >> + info->fifo_data_irq = irq; > >> + disable_irq(irq); > > > > request_irq starts with irq enabled, which means that you can have an > > interrupt showing up between your call to request_irq and the > > disable_irq. > > > > How would that work? > > > > Same as what I answered in Jonathan's mail: > > "Once the interrupt is activated, the IP performs continuous conversions > (temp_data_irq only periodically). I want these interrupts to be enabled > only when I read the sysfs file or we get useless interrupts. > In the current state of this driver's irq handlers, I only set values in > structures and all the needed structures are already initialized before > requesting irqs. So it does not look like a race. I can prevent races in > future versions by adding an atomic flag if wanted." Then please have a nice comment explaining that. > >> +static struct platform_driver sunxi_gpadc_driver = { > >> + .driver = { > >> + .name = "sunxi-gpadc-iio", > >> + }, > >> + .id_table = sunxi_gpadc_id, > >> + .probe = sunxi_gpadc_probe, > >> + .remove = sunxi_gpadc_remove, > >> +}; > > > > Having some runtime_pm support for this would be great too. > > > > Basically disabling the ADC and interrupts (as in the remove) in > _suspend and _idle and reenabling everything in "before _suspend"-state > in _resume I guess? Well, yes and no. Your probe would not do any hardware initialisation. You can pm_runtime_get_sync before using it, which will call the suspend hook. Once you're done, call pm_runtime_put, and that will disable the hardware. Maxime -- Maxime Ripard, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 819 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: maxime.ripard@free-electrons.com (Maxime Ripard) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 2/4] iio: adc: add support for Allwinner SoCs ADC Date: Tue, 19 Jul 2016 14:40:51 +0200 [thread overview] Message-ID: <20160719124051.GB4107@lukather> (raw) In-Reply-To: <578DED17.7040309@free-electrons.com> On Tue, Jul 19, 2016 at 11:04:23AM +0200, Quentin Schulz wrote: > >> +/* TP_CTRL1 bits */ > >> +#define SUNXI_GPADC_STYLUS_UP_DEBOUNCE(x) ((x) << 12) /* 8 bits */ > >> +#define SUNXI_GPADC_STYLUS_UP_DEBOUNCE_EN BIT(9) > >> +#define SUNXI_GPADC_TOUCH_PAN_CALI_EN BIT(6) > >> +#define SUNXI_GPADC_TP_DUAL_EN BIT(5) > >> +#define SUNXI_GPADC_TP_MODE_EN BIT(4) > >> +#define SUNXI_GPADC_TP_ADC_SELECT BIT(3) > >> +#define SUNXI_GPADC_ADC_CHAN_SELECT(x) ((x) << 0) /* 3 bits */ > > > > Usually the comments are on the line above. However, if you really > > want to enforce something, you should rather mask the > > value. Otherwise, that comment is pretty useless. > > > > Do you mean something like that: > #define SUNXI_GPADC_ADC_CHAN_SELECT(x) (GENMASK(2,0) & x) ? Yes. > >> +/* TP_CTRL1 bits for sun6i SOCs */ > >> +#define SUNXI_GPADC_SUN6I_TOUCH_PAN_CALI_EN BIT(7) > >> +#define SUNXI_GPADC_SUN6I_TP_DUAL_EN BIT(6) > >> +#define SUNXI_GPADC_SUN6I_TP_MODE_EN BIT(5) > >> +#define SUNXI_GPADC_SUN6I_TP_ADC_SELECT BIT(4) > > > > Shouldn't that go in either a common define or the touchscreen driver? > > > > Then shouldn't I put all defines in a common header? (sunxi-gpadc-mfd.h) You should :) > >> + irq = regmap_irq_get_virq(sunxi_gpadc_mfd_dev->regmap_irqc, irq); > >> + ret = devm_request_any_context_irq(&pdev->dev, irq, > >> + sunxi_gpadc_fifo_data_irq_handler, > >> + 0, "fifo_data", info); > >> + if (ret < 0) { > >> + dev_err(&pdev->dev, > >> + "could not request FIFO_DATA_PENDING interrupt: %d\n", > >> + ret); > >> + goto err; > >> + } > >> + > >> + info->fifo_data_irq = irq; > >> + disable_irq(irq); > > > > request_irq starts with irq enabled, which means that you can have an > > interrupt showing up between your call to request_irq and the > > disable_irq. > > > > How would that work? > > > > Same as what I answered in Jonathan's mail: > > "Once the interrupt is activated, the IP performs continuous conversions > (temp_data_irq only periodically). I want these interrupts to be enabled > only when I read the sysfs file or we get useless interrupts. > In the current state of this driver's irq handlers, I only set values in > structures and all the needed structures are already initialized before > requesting irqs. So it does not look like a race. I can prevent races in > future versions by adding an atomic flag if wanted." Then please have a nice comment explaining that. > >> +static struct platform_driver sunxi_gpadc_driver = { > >> + .driver = { > >> + .name = "sunxi-gpadc-iio", > >> + }, > >> + .id_table = sunxi_gpadc_id, > >> + .probe = sunxi_gpadc_probe, > >> + .remove = sunxi_gpadc_remove, > >> +}; > > > > Having some runtime_pm support for this would be great too. > > > > Basically disabling the ADC and interrupts (as in the remove) in > _suspend and _idle and reenabling everything in "before _suspend"-state > in _resume I guess? Well, yes and no. Your probe would not do any hardware initialisation. You can pm_runtime_get_sync before using it, which will call the suspend hook. Once you're done, call pm_runtime_put, and that will disable the hardware. Maxime -- Maxime Ripard, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160719/9f70c297/attachment.sig>
next prev parent reply other threads:[~2016-07-19 12:41 UTC|newest] Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-07-15 9:59 [PATCH v2 0/4] add support for Allwinner SoCs ADC Quentin Schulz 2016-07-15 9:59 ` Quentin Schulz 2016-07-15 9:59 ` [PATCH v2 1/4] hwmon: iio_hwmon: defer probe when no channel is found Quentin Schulz 2016-07-15 9:59 ` Quentin Schulz 2016-07-16 17:00 ` [v2,1/4] " Guenter Roeck 2016-07-16 17:00 ` Guenter Roeck 2016-07-18 10:02 ` Maxime Ripard 2016-07-18 10:02 ` Maxime Ripard 2016-07-18 13:29 ` Guenter Roeck 2016-07-18 13:29 ` Guenter Roeck 2016-07-15 9:59 ` [PATCH v2 2/4] iio: adc: add support for Allwinner SoCs ADC Quentin Schulz 2016-07-15 9:59 ` Quentin Schulz 2016-07-18 12:57 ` Maxime Ripard 2016-07-18 12:57 ` Maxime Ripard 2016-07-19 9:04 ` Quentin Schulz 2016-07-19 9:04 ` Quentin Schulz 2016-07-19 12:40 ` Maxime Ripard [this message] 2016-07-19 12:40 ` Maxime Ripard 2016-07-18 13:18 ` Jonathan Cameron 2016-07-18 13:18 ` Jonathan Cameron 2016-07-19 8:33 ` Quentin Schulz 2016-07-19 8:33 ` Quentin Schulz 2016-07-20 14:57 ` Jonathan Cameron 2016-07-20 14:57 ` Jonathan Cameron 2016-07-21 12:15 ` Quentin Schulz 2016-07-21 12:15 ` Quentin Schulz 2016-07-23 6:37 ` Jonathan Cameron 2016-07-23 6:37 ` Jonathan Cameron 2016-07-20 12:37 ` Quentin Schulz 2016-07-20 12:37 ` Quentin Schulz 2016-07-20 14:15 ` Crt Mori 2016-07-20 14:15 ` Crt Mori 2016-07-20 14:59 ` Jonathan Cameron 2016-07-20 14:59 ` Jonathan Cameron 2016-07-15 9:59 ` [PATCH v2 3/4] mfd: " Quentin Schulz 2016-07-15 9:59 ` Quentin Schulz 2016-07-18 13:02 ` Maxime Ripard 2016-07-18 13:02 ` Maxime Ripard 2016-07-19 12:04 ` Quentin Schulz 2016-07-19 12:04 ` Quentin Schulz 2016-07-18 13:25 ` Jonathan Cameron 2016-07-18 13:25 ` Jonathan Cameron 2016-07-19 7:31 ` Lee Jones 2016-07-19 7:31 ` Lee Jones 2016-07-20 15:01 ` Jonathan Cameron 2016-07-20 15:01 ` Jonathan Cameron 2016-07-21 12:12 ` Lee Jones 2016-07-21 12:12 ` Lee Jones 2016-07-21 20:08 ` Maxime Ripard 2016-07-21 20:08 ` Maxime Ripard 2016-07-22 13:55 ` Lee Jones 2016-07-22 13:55 ` Lee Jones 2016-07-23 6:42 ` Jonathan Cameron 2016-07-23 6:42 ` Jonathan Cameron 2016-07-25 9:55 ` Maxime Ripard 2016-07-25 9:55 ` Maxime Ripard 2016-07-19 8:35 ` Quentin Schulz 2016-07-19 8:35 ` Quentin Schulz 2016-07-15 9:59 ` [PATCH v2 4/4] hwmon: iio: add label for channels read by iio_hwmon Quentin Schulz 2016-07-15 9:59 ` Quentin Schulz 2016-07-15 14:03 ` Guenter Roeck 2016-07-15 14:03 ` Guenter Roeck 2016-07-15 14:36 ` Quentin Schulz 2016-07-15 14:36 ` Quentin Schulz 2016-07-16 2:53 ` Guenter Roeck 2016-07-16 2:53 ` Guenter Roeck 2016-07-18 12:24 ` Jonathan Cameron 2016-07-18 12:24 ` Jonathan Cameron 2016-07-19 6:55 ` Quentin Schulz 2016-07-19 6:55 ` Quentin Schulz 2016-07-20 14:49 ` Jonathan Cameron 2016-07-20 14:49 ` Jonathan Cameron
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20160719124051.GB4107@lukather \ --to=maxime.ripard@free-electrons.com \ --cc=antoine.tenart@free-electrons.com \ --cc=jdelvare@suse.com \ --cc=jic23@kernel.org \ --cc=knaack.h@gmx.de \ --cc=lars@metafoo.de \ --cc=lee.jones@linaro.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-hwmon@vger.kernel.org \ --cc=linux-iio@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux@roeck-us.net \ --cc=pmeerw@pmeerw.net \ --cc=quentin.schulz@free-electrons.com \ --cc=thomas.petazzoni@free-electrons.com \ --cc=wens@csie.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.