Messages in this thread | | | Date | Fri, 5 Jun 2009 01:49:12 +0200 | From | Samuel Ortiz <> | Subject | Re: [PATCH 2/7] MFD: ASIC3: add clock handling for MFD cells |
| |
Hi Philipp,
On Thu, Jun 04, 2009 at 08:36:11PM +0200, Philipp Zabel wrote: > + > +struct asic3_clk { > + int enabled; You probably want to use a kref here.
> +static int asic3_clk_enable(struct asic3 *asic, struct asic3_clk *clk) > +{ > + unsigned long flags; > + u32 cdex; > + > + spin_lock_irqsave(&asic->lock, flags); > + if (clk->enabled++ == 0) { using the kref API here would definitely be nicer.
Cheers, Samuel.
> + cdex = asic3_read_register(asic, ASIC3_OFFSET(CLOCK, CDEX)); > + cdex |= clk->cdex; > + asic3_write_register(asic, ASIC3_OFFSET(CLOCK, CDEX), cdex); > + } > + spin_unlock_irqrestore(&asic->lock, flags); > + > + return 0; > +} > + > +static void asic3_clk_disable(struct asic3 *asic, struct asic3_clk *clk) > +{ > + unsigned long flags; > + u32 cdex; > + > + WARN_ON(clk->enabled == 0); > + > + spin_lock_irqsave(&asic->lock, flags); > + if (--clk->enabled == 0) { > + cdex = asic3_read_register(asic, ASIC3_OFFSET(CLOCK, CDEX)); > + cdex &= ~clk->cdex; > + asic3_write_register(asic, ASIC3_OFFSET(CLOCK, CDEX), cdex); > + } > + spin_unlock_irqrestore(&asic->lock, flags); > +} > > /* Core */ > static int __init asic3_probe(struct platform_device *pdev) > @@ -638,6 +713,11 @@ static int __init asic3_probe(struct platform_device *pdev) > goto out_irq; > } > > + /* Making a per-device copy is only needed for the > + * theoretical case of multiple ASIC3s on one board: > + */ > + memcpy(asic->clocks, asic3_clk_init, sizeof(asic3_clk_init)); > + > dev_info(asic->dev, "ASIC3 Core driver\n"); > > return 0; > -- > 1.6.3.1 >
-- Intel Open Source Technology Centre http://oss.intel.com/
| |