[RFC 3/5] ARM: CTI: Convert CTI helpers to AMBA bus driver
From: Pratik Patel <hidden>
Date: 2012-12-21 22:27:03
Also in:
linux-devicetree, linux-omap
On Wed, Dec 12, 2012 at 03:43:06PM -0600, Jon Hunter wrote:
+
+/**
+ * cti_irq_ack - acknowledges the CTI trigger output
+ * @cti: CTI instance
+ *
+ * Acknowledges the CTI trigger output by writting to the appropriate
+ * bit in the CTI interrupt acknowledge register.
+ */
+int cti_irq_ack(struct cti *cti)
+{
+ u32 v;
+
+ if (!cti || !cti->enabled)
+ return -EINVAL;
+
+ v = cti_readl(cti, CTIINTACK);Just curious if CTIINTACK is a read-write register? This is a read-only for us.
+ v |= BIT(cti->trig_out);
+ cti_writel(v, cti, CTIINTACK);
+
+ return 0;
+}
+
+
+static int cti_probe(struct amba_device *dev, const struct amba_id *id)
+{
+ struct cti *cti;
+ struct device_node *np = dev->dev.of_node;
+ int rc;
+
+ if (!np) {
+ dev_err(&dev->dev, "device-tree not found!\n");
+ return -ENODEV;
+ }
+
+ cti = devm_kzalloc(&dev->dev, sizeof(struct cti), GFP_KERNEL);
+ if (!cti) {
+ dev_err(&dev->dev, "memory allocation failed!\n");
+ return -ENOMEM;
+ }
+
+ rc = of_property_read_string_index(np, "arm,cti-name", 0, &cti->name);
+ if (rc) {
+ dev_err(&dev->dev, "no name found for CTI!\n");
+ return rc;
+ }Shouldn't the CTI driver have some kind of clock management that it does for itself?
+
+ if (!dev->irq[0]) {
+ dev_err(&dev->dev, "no CTI interrupt found!\n");
+ return -ENODEV;
+ }
+
+ cti->irq = dev->irq[0];
+ cti->base = of_iomap(np, 0);
+ if (!cti->base) {
+ dev_err(&dev->dev, "unable to map CTI registers!\n");
+ return -ENOMEM;
+ }
+
+ cti->dev = &dev->dev;
+ amba_set_drvdata(dev, cti);
+ list_add_tail(&cti->node, &cti_list);
+
+ /*
+ * AMBA bus driver has already enabled RPM and incremented
+ * use-count, so now we can safely decrement the use-count
+ * and allow the CTI driver to manage RPM for the device.
+ */
+ pm_runtime_put(&dev->dev);
+
+ dev_info(&dev->dev, "ARM CTI driver");
+
+ return 0;
+}
+-- Employee of Qualcomm Innovation Center, Inc. Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation