[PATCH 50/133] [Jaunty SRU] ARM.imx51 Freescale:ENGR00111670-1 ch7026: Return error when not present
Bryan Wu
bryan.wu at canonical.com
Fri Jul 10 15:51:44 UTC 2009
Brad Figg wrote:
> From: Rob Herring <r.herring at freescale.com>
>
> Make the ch7026 driver return an error when it is not found.
>
> Signed-off-by: Rob Herring <r.herring at freescale.com>
> Signed-off-by: Brad Figg <brad.figg at canonical.com>
> ---
> drivers/video/mxc/mxcfb_ch7026.c | 32 ++++++++++++++++++++++++++------
> 1 files changed, 26 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/video/mxc/mxcfb_ch7026.c b/drivers/video/mxc/mxcfb_ch7026.c
> index 2acb072..c781e1c 100644
> --- a/drivers/video/mxc/mxcfb_ch7026.c
> +++ b/drivers/video/mxc/mxcfb_ch7026.c
> @@ -41,7 +41,7 @@
>
> static struct i2c_client *ch7026_client;
>
> -static void lcd_init(void);
> +static int lcd_init(void);
> static void lcd_poweron(struct fb_info *info);
> static void lcd_poweroff(void);
>
> @@ -110,6 +110,7 @@ static struct notifier_block nb = {
> */
> static int __devinit lcd_probe(struct device *dev)
> {
> + int ret = 0;
> int i;
> struct mxc_lcd_platform_data *plat = dev->platform_data;
>
> @@ -119,16 +120,23 @@ static int __devinit lcd_probe(struct device *dev)
> if (!IS_ERR(io_reg)) {
> regulator_set_voltage(io_reg, 1800000, 1800000);
> regulator_enable(io_reg);
> + } else {
> + io_reg = NULL;
> }
> +
The bracket after 'else' are useless, because there is only one line code in
that scope.
> core_reg = regulator_get(dev, plat->core_reg);
> if (!IS_ERR(core_reg)) {
> regulator_set_voltage(core_reg, 2500000, 2500000);
> regulator_enable(core_reg);
> + } else {
> + core_reg = NULL;
> }
Ditto
> analog_reg = regulator_get(dev, plat->analog_reg);
> if (!IS_ERR(analog_reg)) {
> regulator_set_voltage(analog_reg, 2775000, 2775000);
> regulator_enable(analog_reg);
> + } else {
> + analog_reg = NULL;
> }
Ditto
-Bryan
> msleep(100);
>
> @@ -139,16 +147,27 @@ static int __devinit lcd_probe(struct device *dev)
>
> for (i = 0; i < num_registered_fb; i++) {
> if (strcmp(registered_fb[i]->fix.id, "DISP3 BG - DI1") == 0) {
> + ret = lcd_init();
> + if (ret < 0)
> + goto err;
> +
> lcd_init_fb(registered_fb[i]);
> fb_show_logo(registered_fb[i], 0);
> - lcd_init();
> lcd_poweron(registered_fb[i]);
> }
> }
>
> fb_register_client(&nb);
> -
> return 0;
> +err:
> + if (io_reg)
> + regulator_disable(io_reg);
> + if (core_reg)
> + regulator_disable(core_reg);
> + if (analog_reg)
> + regulator_disable(analog_reg);
> +
> + return ret;
> }
>
> static int __devinit ch7026_probe(struct i2c_client *client,
> @@ -249,7 +268,7 @@ u8 reg_init[][2] = {
> * Send init commands to L4F00242T03
> *
> */
> -static void lcd_init(void)
> +static int lcd_init(void)
> {
> int i;
> int dat;
> @@ -261,14 +280,15 @@ static void lcd_init(void)
> dat = i2c_smbus_read_byte_data(ch7026_client, 0x00);
> dev_dbg(&ch7026_client->dev, "read id = 0x%02X\n", dat);
> if (dat != 0x54)
> - return;
> + return -ENODEV;
>
> for (i = 0; i < REGMAP_LENGTH; ++i) {
> if (i2c_smbus_write_byte_data
> (ch7026_client, reg_init[i][0], reg_init[i][1]) < 0)
> - return;
> + return -EIO;
> }
>
> + return 0;
> }
>
> static int lcd_on;
More information about the kernel-team
mailing list