Re: [PATCH 1/3] mfd: Add S5M8751 register definitions

From: Mark Brown
Date: Wed Jun 22 2011 - 08:42:30 EST


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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/