All of lore.kernel.org
 help / color / mirror / Atom feed
* [bug report] drm/panel: Add BOE BF060Y8M-AJ0 5.99" AMOLED panel driver
@ 2021-11-18 14:59 Dan Carpenter
  0 siblings, 0 replies; only message in thread
From: Dan Carpenter @ 2021-11-18 14:59 UTC (permalink / raw)
  To: angelogioacchino.delregno; +Cc: dri-devel

Hello AngeloGioacchino Del Regno,

The patch a19125a28112: "drm/panel: Add BOE BF060Y8M-AJ0 5.99" AMOLED
panel driver" from Sep 1, 2021, leads to the following (unpublished)
Smatch static checker warning:

drivers/gpu/drm/panel/panel-boe-bf060y8m-aj0.c:317 boe_bf060y8m_aj0_init_vregs() info: return a literal instead of 'ret'
drivers/gpu/drm/panel/panel-boe-bf060y8m-aj0.c:322 boe_bf060y8m_aj0_init_vregs() info: return a literal instead of 'ret'
drivers/gpu/drm/panel/panel-boe-bf060y8m-aj0.c:327 boe_bf060y8m_aj0_init_vregs() info: return a literal instead of 'ret'
drivers/gpu/drm/panel/panel-boe-bf060y8m-aj0.c:332 boe_bf060y8m_aj0_init_vregs() info: return a literal instead of 'ret'
drivers/gpu/drm/panel/panel-boe-bf060y8m-aj0.c:338 boe_bf060y8m_aj0_init_vregs() info: return a literal instead of 'ret'

drivers/gpu/drm/panel/panel-boe-bf060y8m-aj0.c
    296 static int boe_bf060y8m_aj0_init_vregs(struct boe_bf060y8m_aj0 *boe,
    297                                        struct device *dev)
    298 {
    299         struct regulator *vreg;
    300         int ret;
    301 
    302         boe->vregs[BF060Y8M_VREG_VCC].supply = "vcc";
    303         boe->vregs[BF060Y8M_VREG_VDDIO].supply = "vddio";
    304         boe->vregs[BF060Y8M_VREG_VCI].supply = "vci";
    305         boe->vregs[BF060Y8M_VREG_EL_VDD].supply = "elvdd";
    306         boe->vregs[BF060Y8M_VREG_EL_VSS].supply = "elvss";
    307         ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(boe->vregs),
    308                                       boe->vregs);
    309         if (ret < 0) {
    310                 dev_err(dev, "Failed to get regulators: %d\n", ret);
    311                 return ret;
    312         }
    313 
    314         vreg = boe->vregs[BF060Y8M_VREG_VCC].consumer;
    315         ret = regulator_is_supported_voltage(vreg, 2700000, 3600000);
    316         if (!ret)
                ^^^^^^^^^

--> 317                 return ret;

It's more clear to "return 0;" instead of "return ret;"

The documentation for regulator_is_supported_voltage() says it returns
bool but actually it returns negatives for if regulator_get_voltage()
fails and one for if it's supported and zero for when it's not.

These if (!ret) seem wrong.

    318 
    319         vreg = boe->vregs[BF060Y8M_VREG_VDDIO].consumer;
    320         ret = regulator_is_supported_voltage(vreg, 1620000, 1980000);
    321         if (!ret)
                ^^^^^^^^^

    322                 return ret;
    323 
    324         vreg = boe->vregs[BF060Y8M_VREG_VCI].consumer;
    325         ret = regulator_is_supported_voltage(vreg, 2600000, 3600000);
    326         if (!ret)
                ^^^^^^^^^

    327                 return ret;
    328 
    329         vreg = boe->vregs[BF060Y8M_VREG_EL_VDD].consumer;
    330         ret = regulator_is_supported_voltage(vreg, 4400000, 4800000);
    331         if (!ret)
                ^^^^^^^^^

    332                 return ret;
    333 
    334         /* ELVSS is negative: -5.00V to -1.40V */
    335         vreg = boe->vregs[BF060Y8M_VREG_EL_VSS].consumer;
    336         ret = regulator_is_supported_voltage(vreg, 1400000, 5000000);
    337         if (!ret)
                ^^^^^^^^

    338                 return ret;
    339 
    340         /*
    341          * Set min/max rated current, known only for VCI and VDDIO and,
    342          * in case of failure, just go on gracefully, as this step is not
    343          * guaranteed to succeed on all regulator HW but do a debug print
    344          * to inform the developer during debugging.
    345          * In any case, these two supplies are also optional, so they may
    346          * be fixed-regulator which, at the time of writing, does not
    347          * support fake current limiting.
    348          */
    349         vreg = boe->vregs[BF060Y8M_VREG_VDDIO].consumer;
    350         ret = regulator_set_current_limit(vreg, 1500, 2500);
    351         if (ret)
    352                 dev_dbg(dev, "Current limit cannot be set on %s: %d\n",
    353                         boe->vregs[1].supply, ret);
    354 
    355         vreg = boe->vregs[BF060Y8M_VREG_VCI].consumer;
    356         ret = regulator_set_current_limit(vreg, 20000, 40000);
    357         if (ret)
    358                 dev_dbg(dev, "Current limit cannot be set on %s: %d\n",
    359                         boe->vregs[2].supply, ret);
    360 
    361         return 0;
    362 }

regards,
dan carpenter

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-11-18 15:00 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-11-18 14:59 [bug report] drm/panel: Add BOE BF060Y8M-AJ0 5.99" AMOLED panel driver Dan Carpenter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.