/** * struct bcm6358_led - state container for bcm6358 based LEDs * @cdev: LED class device for this LED * @mem: memory resource * @lock: memory lock * @pin: LED pin number * @active_low: LED is active low
*/ struct bcm6358_led { struct led_classdev cdev; void __iomem *mem;
spinlock_t *lock; unsignedlong pin; bool active_low;
};
mem = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(mem)) return PTR_ERR(mem);
lock = devm_kzalloc(dev, sizeof(*lock), GFP_KERNEL); if (!lock) return -ENOMEM;
spin_lock_init(lock);
val = bcm6358_led_busy(mem);
val &= ~(BCM6358_SLED_POLARITY | BCM6358_SLED_CLKDIV_MASK); if (of_property_read_bool(np, "brcm,clk-dat-low"))
val |= BCM6358_SLED_POLARITY;
of_property_read_u32(np, "brcm,clk-div", &clk_div); switch (clk_div) { case 8:
val |= BCM6358_SLED_CLKDIV_8; break; case 4:
val |= BCM6358_SLED_CLKDIV_4; break; case 2:
val |= BCM6358_SLED_CLKDIV_2; break; default:
val |= BCM6358_SLED_CLKDIV_1; break;
}
bcm6358_led_write(mem + BCM6358_REG_CTRL, val);
for_each_available_child_of_node_scoped(np, child) { int rc;
u32 reg;
if (of_property_read_u32(child, "reg", ®)) continue;
if (reg >= BCM6358_SLED_MAX_COUNT) {
dev_err(dev, "invalid LED (%u >= %d)\n", reg,
BCM6358_SLED_MAX_COUNT); continue;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.