[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110622124222.GC23666@sirena.org.uk>
Date: Wed, 22 Jun 2011 13:42:23 +0100
From: Mark Brown <broonie@...nsource.wolfsonmicro.com>
To: Sangbeom Kim <sbkim73@...sung.com>
Cc: sameo@...ux.intel.com, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 1/3] mfd: Add S5M8751 register definitions
On Wed, Jun 22, 2011 at 02:53:55PM +0900, Sangbeom Kim wrote:
> This patch add S5M8751 PMIC register definitions.
> Separated as large code size
These don't look like register definitions:
> +struct s5m8751;
> +
> +struct s5m8751_irq {
> + void (*handler) (struct s5m8751 *, int, void *);
> + void *data;
> +};
> +
> +struct s5m8751 {
> + struct device *dev;
> +
> + /* device IO */
> + struct i2c_client *i2c_client;
> +
> + int (*read_dev)(struct s5m8751 *s5m8751, uint8_t reg, uint8_t *val);
> + int (*write_dev)(struct s5m8751 *s5m8751, uint8_t reg, uint8_t val);
> +
> + int (*read_block_dev)(struct s5m8751 *s5m8751, uint8_t reg, int len,
> + uint8_t *val);
> + int (*write_block_dev)(struct s5m8751 *s5m8751, uint8_t reg, int len,
> + uint8_t *val);
> + u8 *reg_cache;
> +
> + /* Interrupt handling */
> + struct work_struct irq_work;
> + struct mutex irq_mutex; /* IRQ table mutex */
> + struct s5m8751_irq irq[S5M8751_NUM_IRQ];
> + int chip_irq;
> +
> + /* Client devices */
> +};
> +/* S5M8751 Device IO */
> +int s5m8751_clear_bits(struct s5m8751 *s5m8751, uint8_t reg, uint8_t mask);
> +int s5m8751_set_bits(struct s5m8751 *s5m8751, uint8_t reg, uint8_t mask);
> +int s5m8751_reg_read(struct s5m8751 *s5m8751, uint8_t reg, uint8_t *val);
> +int s5m8751_reg_write(struct s5m8751 *s5m8751, uint8_t reg, uint8_t val);
> +int s5m8751_block_read(struct s5m8751 *s5m8751, uint8_t reg, int len,
> + uint8_t *val);
> +int s5m8751_block_write(struct s5m8751 *s5m8751, uint8_t reg, int len,
> + uint8_t *val);
I posted a series earlier this week which adds a generic API for
handling register maps on I2C/SPI devices - I'll post another version of
it shortly, it'd be nice if you could loook to see if this is usable for
you.
> +/* S5M8751 internal interrupts */
> +int s5m8751_register_irq(struct s5m8751 *s5m8751, int irq,
> + void (*handler) (struct s5m8751 *, int, void *),
> + void *data);
> +
> +int s5m8751_free_irq(struct s5m8751 *s5m8751, int irq);
> +int s5m8751_mask_irq(struct s5m8751 *s5m8751, int irq);
> +int s5m8751_unmask_irq(struct s5m8751 *s5m8751, int irq);
> +int s5m8751_clear_irq(struct s5m8751 *s5m8751);
You should use genirq for this, it's supported this for quite some time
now. There's quite a few MFDs doing this which you can used for
examples.
> +/* S5M8751 sysfs functions */
> +int s5m8751_uvlo_get(struct s5m8751 *s5m8751);
> +int s5m8751_uvlo_set(struct s5m8751 *s5m8751, int voltage);
> +
> +int s5m8751_audio_dev_register(struct s5m8751 *s5m8751,
> + const char *name,
> + struct platform_device **pdev);
These shouldn't need to be in the header.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists