* [bug report] drivers:iio:dac: Add AD3552R driver support
@ 2022-04-01 10:06 Dan Carpenter
2022-04-01 12:07 ` Sa, Nuno
0 siblings, 1 reply; 3+ messages in thread
From: Dan Carpenter @ 2022-04-01 10:06 UTC (permalink / raw)
To: mihail.chindris; +Cc: linux-iio
Hello Mihail Chindris,
The patch 8f2b54824b28: "drivers:iio:dac: Add AD3552R driver support"
from Dec 13, 2021, leads to the following Smatch static checker
warning:
drivers/iio/dac/ad3552r.c:812 ad3552r_configure_custom_gain()
warn: 'gain_child' is not an error pointer
drivers/iio/dac/ad3552r.c
799 static int ad3552r_configure_custom_gain(struct ad3552r_desc *dac,
800 struct fwnode_handle *child,
801 u32 ch)
802 {
803 struct device *dev = &dac->spi->dev;
804 struct fwnode_handle *gain_child;
805 u32 val;
806 int err;
807 u8 addr;
808 u16 reg = 0, offset;
809
810 gain_child = fwnode_get_named_child_node(child,
811 "custom-output-range-config");
--> 812 if (IS_ERR(gain_child)) {
This should probably be a NULL check right? return -EINVAL;?
813 dev_err(dev,
814 "mandatory custom-output-range-config property missing\n");
815 return PTR_ERR(gain_child);
816 }
817
818 dac->ch_data[ch].range_override = 1;
819 reg |= ad3552r_field_prep(1, AD3552R_MASK_CH_RANGE_OVERRIDE);
820
821 err = fwnode_property_read_u32(gain_child, "adi,gain-scaling-p", &val);
822 if (err) {
823 dev_err(dev, "mandatory adi,gain-scaling-p property missing\n");
824 goto put_child;
825 }
826 reg |= ad3552r_field_prep(val, AD3552R_MASK_CH_GAIN_SCALING_P);
827 dac->ch_data[ch].p = val;
828
829 err = fwnode_property_read_u32(gain_child, "adi,gain-scaling-n", &val);
830 if (err) {
831 dev_err(dev, "mandatory adi,gain-scaling-n property missing\n");
832 goto put_child;
833 }
834 reg |= ad3552r_field_prep(val, AD3552R_MASK_CH_GAIN_SCALING_N);
835 dac->ch_data[ch].n = val;
836
837 err = fwnode_property_read_u32(gain_child, "adi,rfb-ohms", &val);
838 if (err) {
839 dev_err(dev, "mandatory adi,rfb-ohms property missing\n");
840 goto put_child;
841 }
842 dac->ch_data[ch].rfb = val;
843
844 err = fwnode_property_read_u32(gain_child, "adi,gain-offset", &val);
845 if (err) {
846 dev_err(dev, "mandatory adi,gain-offset property missing\n");
847 goto put_child;
848 }
849 dac->ch_data[ch].gain_offset = val;
850
851 offset = abs((s32)val);
852 reg |= ad3552r_field_prep((offset >> 8), AD3552R_MASK_CH_OFFSET_BIT_8);
853
854 reg |= ad3552r_field_prep((s32)val < 0, AD3552R_MASK_CH_OFFSET_POLARITY);
855 addr = AD3552R_REG_ADDR_CH_GAIN(ch);
856 err = ad3552r_write_reg(dac, addr,
857 offset & AD3552R_MASK_CH_OFFSET_BITS_0_7);
858 if (err) {
859 dev_err(dev, "Error writing register\n");
860 goto put_child;
861 }
862
863 err = ad3552r_write_reg(dac, addr, reg);
864 if (err) {
865 dev_err(dev, "Error writing register\n");
866 goto put_child;
867 }
868
869 put_child:
870 fwnode_handle_put(gain_child);
871
872 return err;
873 }
regards,
dan carpenter
^ permalink raw reply [flat|nested] 3+ messages in thread* RE: [bug report] drivers:iio:dac: Add AD3552R driver support
2022-04-01 10:06 [bug report] drivers:iio:dac: Add AD3552R driver support Dan Carpenter
@ 2022-04-01 12:07 ` Sa, Nuno
0 siblings, 0 replies; 3+ messages in thread
From: Sa, Nuno @ 2022-04-01 12:07 UTC (permalink / raw)
To: Dan Carpenter; +Cc: linux-iio@vger.kernel.org
Hi Dan,
Thanks for the report. That email is no longer valid as Mihai moved...
That reminds me that I need to send a patch to update MAINTAINERS.
> -----Original Message-----
> From: Dan Carpenter <dan.carpenter@oracle.com>
> Sent: Friday, April 1, 2022 12:06 PM
> To: mihail.chindris@analog.com
> Cc: linux-iio@vger.kernel.org
> Subject: [bug report] drivers:iio:dac: Add AD3552R driver support
>
> [External]
>
> Hello Mihail Chindris,
>
> The patch 8f2b54824b28: "drivers:iio:dac: Add AD3552R driver support"
> from Dec 13, 2021, leads to the following Smatch static checker
> warning:
>
> drivers/iio/dac/ad3552r.c:812
> ad3552r_configure_custom_gain()
> warn: 'gain_child' is not an error pointer
>
> drivers/iio/dac/ad3552r.c
> 799 static int ad3552r_configure_custom_gain(struct ad3552r_desc
> *dac,
> 800 struct fwnode_handle *child,
> 801 u32 ch)
> 802 {
> 803 struct device *dev = &dac->spi->dev;
> 804 struct fwnode_handle *gain_child;
> 805 u32 val;
> 806 int err;
> 807 u8 addr;
> 808 u16 reg = 0, offset;
> 809
> 810 gain_child = fwnode_get_named_child_node(child,
> 811 "custom-output-range-config");
> --> 812 if (IS_ERR(gain_child)) {
>
> This should probably be a NULL check right? return -EINVAL;?
Yes to both questions...
- Nuno Sá
^ permalink raw reply [flat|nested] 3+ messages in thread
* [bug report] drivers:iio:dac: Add AD3552R driver support
@ 2022-01-06 10:35 Dan Carpenter
0 siblings, 0 replies; 3+ messages in thread
From: Dan Carpenter @ 2022-01-06 10:35 UTC (permalink / raw)
To: mihail.chindris; +Cc: linux-iio
Hello Mihail Chindris,
The patch 8f2b54824b28: "drivers:iio:dac: Add AD3552R driver support"
from Dec 13, 2021, leads to the following Smatch static checker
warning:
drivers/iio/dac/ad3552r.c:688 ad3552r_reset()
warn: impossible condition '(val < 0) => (0-u16max < 0)'
drivers/iio/dac/ad3552r.c:699 ad3552r_reset()
warn: impossible condition '(val < 0) => (0-u16max < 0)'
drivers/iio/dac/ad3552r.c
655 static int ad3552r_reset(struct ad3552r_desc *dac)
656 {
657 struct reg_addr_pool addr;
658 int ret;
659 u16 val;
^^^^^^^
660
661 dac->gpio_reset = devm_gpiod_get_optional(&dac->spi->dev, "reset",
662 GPIOD_OUT_LOW);
663 if (IS_ERR(dac->gpio_reset))
664 return dev_err_probe(&dac->spi->dev, PTR_ERR(dac->gpio_reset),
665 "Error while getting gpio reset");
666
667 if (dac->gpio_reset) {
668 /* Perform hardware reset */
669 usleep_range(10, 20);
670 gpiod_set_value_cansleep(dac->gpio_reset, 1);
671 } else {
672 /* Perform software reset if no GPIO provided */
673 ret = ad3552r_update_reg_field(dac,
674 AD3552R_REG_ADDR_INTERFACE_CONFIG_A,
675 AD3552R_MASK_SOFTWARE_RESET,
676 AD3552R_MASK_SOFTWARE_RESET);
677 if (ret < 0)
678 return ret;
679
680 }
681
682 addr.dac = dac;
683 addr.addr = AD3552R_REG_ADDR_INTERFACE_CONFIG_B;
684 ret = readx_poll_timeout(ad3552r_read_reg_wrapper, &addr, val,
685 val == AD3552R_DEFAULT_CONFIG_B_VALUE ||
686 val < 0,
^^^^^^^
Unsigned can't be < 0.
687 5000, 50000);
--> 688 if (val < 0)
^^^^^^^
689 ret = val;
690 if (ret) {
691 dev_err(&dac->spi->dev, "Error while resetting");
692 return ret;
693 }
694
695 ret = readx_poll_timeout(ad3552r_read_reg_wrapper, &addr, val,
696 !(val & AD3552R_MASK_INTERFACE_NOT_READY) ||
697 val < 0,
^^^^^^^
698 5000, 50000);
699 if (val < 0)
^^^^^^^
700 ret = val;
701 if (ret) {
702 dev_err(&dac->spi->dev, "Error while resetting");
703 return ret;
704 }
705
706 return ad3552r_update_reg_field(dac,
707 addr_mask_map[AD3552R_ADDR_ASCENSION][0],
708 addr_mask_map[AD3552R_ADDR_ASCENSION][1],
709 val);
710 }
regards,
dan carpenter
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-04-01 12:07 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-04-01 10:06 [bug report] drivers:iio:dac: Add AD3552R driver support Dan Carpenter
2022-04-01 12:07 ` Sa, Nuno
-- strict thread matches above, loose matches on Subject: below --
2022-01-06 10:35 Dan Carpenter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).