From: Varka Bhadram <varkabhadram@gmail.com>
To: Zhangfei Gao <zhangfei.gao@linaro.org>,
Mauro Carvalho Chehab <m.chehab@samsung.com>,
sean@mess.org, arnd@arndb.de, haifeng.yan@linaro.org,
jchxue@gmail.com
Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org,
linux-media@vger.kernel.org,
Guoxiong Yan <yanguoxiong@huawei.com>
Subject: Re: [PATCH v3 2/3] rc: Introduce hix5hd2 IR transmitter driver
Date: Fri, 29 Aug 2014 09:11:41 +0530 [thread overview]
Message-ID: <53FFF675.7020702@gmail.com> (raw)
In-Reply-To: <1409238977-19444-3-git-send-email-zhangfei.gao@linaro.org>
On 08/28/2014 08:46 PM, Zhangfei Gao wrote:
> From: Guoxiong Yan <yanguoxiong@huawei.com>
>
> IR transmitter driver for Hisilicon hix5hd2 soc
>
> By default all protocols are disabled.
> For example nec decoder can be enabled by either
> 1. ir-keytable -p nec
> 2. echo nec > /sys/class/rc/rc0/protocols
> See see Documentation/ABI/testing/sysfs-class-rc
>
(...)
> +static irqreturn_t hix5hd2_ir_rx_interrupt(int irq, void *data)
> +{
> + u32 symb_num, symb_val, symb_time;
> + u32 data_l, data_h;
> + u32 irq_sr, i;
> + struct hix5hd2_ir_priv *priv = data;
> +
> + irq_sr = readl_relaxed(priv->base + IR_INTS);
> + if (irq_sr & INTMS_OVERFLOW) {
> + /*
> + * we must read IR_DATAL first, then we can clean up
> + * IR_INTS availably since logic would not clear
> + * fifo when overflow, drv do the job
> + */
> + ir_raw_event_reset(priv->rdev);
> + symb_num = readl_relaxed(priv->base + IR_DATAH);
> + for (i = 0; i < symb_num; i++)
> + readl_relaxed(priv->base + IR_DATAL);
> +
> + writel_relaxed(INT_CLR_OVERFLOW, priv->base + IR_INTC);
> + dev_info(priv->dev, "overflow, level=%d\n",
> + IR_CFG_INT_THRESHOLD);
> + }
> +
> + if ((irq_sr & INTMS_SYMBRCV) || (irq_sr & INTMS_TIMEOUT)) {
> + DEFINE_IR_RAW_EVENT(ev);
> +
> + symb_num = readl_relaxed(priv->base + IR_DATAH);
> + for (i = 0; i < symb_num; i++) {
> + symb_val = readl_relaxed(priv->base + IR_DATAL);
> + data_l = ((symb_val & 0xffff) * 10);
> + data_h = ((symb_val >> 16) & 0xffff) * 10;
> + symb_time = (data_l + data_h) / 10;
> +
> + ev.duration = US_TO_NS(data_l);
> + ev.pulse = true;
> + ir_raw_event_store(priv->rdev, &ev);
> +
> + if (symb_time < IR_CFG_SYMBOL_MAXWIDTH) {
> + ev.duration = US_TO_NS(data_h);
> + ev.pulse = false;
> + ir_raw_event_store(priv->rdev, &ev);
> + } else {
> + hix5hd2_ir_send_lirc_timeout(priv->rdev);
> + }
> + }
> +
> + if (irq_sr & INTMS_SYMBRCV)
> + writel_relaxed(INT_CLR_RCV, priv->base + IR_INTC);
> + if (irq_sr & INTMS_TIMEOUT)
> + writel_relaxed(INT_CLR_TIMEOUT, priv->base + IR_INTC);
> + }
> +
> + /* Empty software fifo */
> + ir_raw_event_handle(priv->rdev);
> + return IRQ_HANDLED;
> +}
> +
It looks good if the entire ISR() above the probe()/remove() functionalities
of the driver. Maximum of the developers follows this structure.
(...)
> +static struct of_device_id hix5hd2_ir_table[] = {
> + { .compatible = "hisilicon,hix5hd2-ir", },
> + {},
> +};
> +MODULE_DEVICE_TABLE(of, hix5hd2_ir_table);
> +
Every driver put these device ids above *struct platform_driver* definition.
So that we can see the of_match_table....
> +static int hix5hd2_ir_probe(struct platform_device *pdev)
> +{
> + int ret;
> + struct rc_dev *rdev;
> + struct device *dev = &pdev->dev;
> + struct resource *res;
> + struct hix5hd2_ir_priv *priv;
> + struct device_node *node = pdev->dev.of_node;
> +
> + priv = devm_kzalloc(dev, sizeof(struct hix5hd2_ir_priv), GFP_KERNEL);
sizeof(*priv)...?
> + if (!priv)
> + return -ENOMEM;
> +
(...)
> +#endif
> +
> +static SIMPLE_DEV_PM_OPS(hix5hd2_ir_pm_ops, hix5hd2_ir_suspend,
> + hix5hd2_ir_resume);
> +
We can move the device ids here....
> +static struct platform_driver hix5hd2_ir_driver = {
> + .driver = {
> + .name = IR_HIX5HD2_NAME,
> + .of_match_table = hix5hd2_ir_table,
> + .pm = &hix5hd2_ir_pm_ops,
> + },
> + .probe = hix5hd2_ir_probe,
> + .remove = hix5hd2_ir_remove,
> +};
> +
> +module_platform_driver(hix5hd2_ir_driver);
> +
> +MODULE_DESCRIPTION("RC Transceiver driver for hix5hd2 platforms");
> +MODULE_AUTHOR("Guoxiong Yan <yanguoxiong@huawei.com>");
> +MODULE_LICENSE("GPL v2");
> +MODULE_ALIAS("platform:hix5hd2-ir");
--
Regards,
Varka Bhadram.
next prev parent reply other threads:[~2014-08-29 3:41 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-28 15:16 [PATCH v3 0/3] Introduce hix5hd2 IR transmitter driver Zhangfei Gao
2014-08-28 15:16 ` [PATCH v3 1/3] rc: Add DT bindings for hix5hd2 Zhangfei Gao
2014-08-29 3:30 ` Varka Bhadram
2014-08-28 15:16 ` [PATCH v3 2/3] rc: Introduce hix5hd2 IR transmitter driver Zhangfei Gao
2014-08-28 16:22 ` Sean Young
2014-08-30 13:24 ` zhangfei
2014-08-29 3:41 ` Varka Bhadram [this message]
2014-08-30 13:58 ` zhangfei
2014-08-28 15:16 ` [PATCH v3 3/3] ARM: dts: hix5hd2: add ir node Zhangfei Gao
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=53FFF675.7020702@gmail.com \
--to=varkabhadram@gmail.com \
--cc=arnd@arndb.de \
--cc=devicetree@vger.kernel.org \
--cc=haifeng.yan@linaro.org \
--cc=jchxue@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-media@vger.kernel.org \
--cc=m.chehab@samsung.com \
--cc=sean@mess.org \
--cc=yanguoxiong@huawei.com \
--cc=zhangfei.gao@linaro.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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).