diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2017-10-19 15:07:40 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2017-10-19 15:07:40 +0200 |
commit | 7f04124c149fa4d8e8f657907c581f10987003e2 (patch) | |
tree | d4f9c129f5ef7f4f28231766f449a12fb755b7e6 /drivers | |
parent | 71d764a4b05d3ca4ec8d14f71c9149fd0023424e (diff) | |
parent | 25c3fb28d8017595942115d4dbffc16d96f43930 (diff) | |
download | barebox-7f04124c149fa4d8e8f657907c581f10987003e2.tar.gz barebox-7f04124c149fa4d8e8f657907c581f10987003e2.tar.xz |
Merge branch 'for-next/misc'
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/base/regmap/regmap.c | 29 | ||||
-rw-r--r-- | drivers/clk/mxs/clk-div.c | 2 | ||||
-rw-r--r-- | drivers/clk/mxs/clk-pll.c | 2 | ||||
-rw-r--r-- | drivers/clk/mxs/clk-ref.c | 2 | ||||
-rw-r--r-- | drivers/gpio/gpio-clps711x.c | 2 | ||||
-rw-r--r-- | drivers/gpio/gpio-generic.c | 2 | ||||
-rw-r--r-- | drivers/gpio/gpio-vf610.c | 2 | ||||
-rw-r--r-- | drivers/gpio/gpiolib.c | 12 | ||||
-rw-r--r-- | drivers/mci/mci-core.c | 12 | ||||
-rw-r--r-- | drivers/mtd/nand/atmel_nand.c | 2 | ||||
-rw-r--r-- | drivers/mtd/spi-nor/Kconfig | 13 | ||||
-rw-r--r-- | drivers/mtd/ubi/attach.c | 2 | ||||
-rw-r--r-- | drivers/net/gianfar.c | 3 | ||||
-rw-r--r-- | drivers/net/phy/marvell.c | 73 | ||||
-rw-r--r-- | drivers/of/base.c | 2 | ||||
-rw-r--r-- | drivers/pci/pci-imx6.c | 2 | ||||
-rw-r--r-- | drivers/pinctrl/pinctrl-mxs.c | 2 | ||||
-rw-r--r-- | drivers/pinctrl/pinctrl-rockchip.c | 2 | ||||
-rw-r--r-- | drivers/usb/gadget/pxa27x_udc.c | 2 | ||||
-rw-r--r-- | drivers/usb/musb/musb_host.c | 2 | ||||
-rw-r--r-- | drivers/usb/musb/phy-am335x-control.c | 4 | ||||
-rw-r--r-- | drivers/usb/musb/phy-am335x.c | 2 | ||||
-rw-r--r-- | drivers/video/backlight-pwm.c | 2 | ||||
-rw-r--r-- | drivers/video/tc358767.c | 2 |
24 files changed, 133 insertions, 47 deletions
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index 52b7d88c74..67d95fe30a 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c @@ -137,6 +137,35 @@ int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val) } /** + * regmap_update_bits() - Perform a read/modify/write cycle on a register + * + * @map: Register map to update + * @reg: Register to update + * @mask: Bitmask to change + * @val: New value for bitmask + * + * Returns zero for success, a negative number on error. + */ +int regmap_update_bits(struct regmap *map, unsigned int reg, + unsigned int mask, unsigned int val) +{ + int ret; + unsigned int tmp, orig; + + ret = regmap_read(map, reg, &orig); + if (ret != 0) + return ret; + + tmp = orig & ~mask; + tmp |= val & mask; + + if (tmp != orig) + ret = regmap_write(map, reg, tmp); + + return ret; +} + +/** * regmap_write_bits - write bits of a register in a map * * @map: The map diff --git a/drivers/clk/mxs/clk-div.c b/drivers/clk/mxs/clk-div.c index e8dae25da5..797e5a274f 100644 --- a/drivers/clk/mxs/clk-div.c +++ b/drivers/clk/mxs/clk-div.c @@ -86,8 +86,6 @@ struct clk *mxs_clk_div(const char *name, const char *parent_name, int ret; div = xzalloc(sizeof(*div)); - if (!div) - return ERR_PTR(-ENOMEM); div->parent = parent_name; div->divider.clk.name = name; diff --git a/drivers/clk/mxs/clk-pll.c b/drivers/clk/mxs/clk-pll.c index 89fd6b5e31..1b1c9b3543 100644 --- a/drivers/clk/mxs/clk-pll.c +++ b/drivers/clk/mxs/clk-pll.c @@ -96,8 +96,6 @@ struct clk *mxs_clk_pll(const char *name, const char *parent_name, int ret; pll = xzalloc(sizeof(*pll)); - if (!pll) - return ERR_PTR(-ENOMEM); pll->parent = parent_name; pll->clk.name = name; diff --git a/drivers/clk/mxs/clk-ref.c b/drivers/clk/mxs/clk-ref.c index 7ff5527797..8d0be05615 100644 --- a/drivers/clk/mxs/clk-ref.c +++ b/drivers/clk/mxs/clk-ref.c @@ -144,8 +144,6 @@ struct clk *mxs_clk_ref(const char *name, const char *parent_name, int ret; ref = xzalloc(sizeof(*ref)); - if (!ref) - return ERR_PTR(-ENOMEM); ref->parent = parent_name; ref->clk.name = name; diff --git a/drivers/gpio/gpio-clps711x.c b/drivers/gpio/gpio-clps711x.c index 769e6ca4f7..c1ec6ab685 100644 --- a/drivers/gpio/gpio-clps711x.c +++ b/drivers/gpio/gpio-clps711x.c @@ -47,8 +47,6 @@ static int clps711x_gpio_probe(struct device_d *dev) } bgc = xzalloc(sizeof(struct bgpio_chip)); - if (!bgc) - return -ENOMEM; err = bgpio_init(bgc, dev, 1, dat, NULL, NULL, dir, dir_inv, 0); if (err) diff --git a/drivers/gpio/gpio-generic.c b/drivers/gpio/gpio-generic.c index 14b451bfff..e4c4f39b62 100644 --- a/drivers/gpio/gpio-generic.c +++ b/drivers/gpio/gpio-generic.c @@ -373,8 +373,6 @@ static int bgpio_dev_probe(struct device_d *dev) dev_get_drvdata(dev, (const void **)&flags); bgc = xzalloc(sizeof(struct bgpio_chip)); - if (!bgc) - return -ENOMEM; err = bgpio_init(bgc, dev, sz, dat, set, clr, dirout, dirin, flags); if (err) diff --git a/drivers/gpio/gpio-vf610.c b/drivers/gpio/gpio-vf610.c index 7c8d1e4c98..2aff62be59 100644 --- a/drivers/gpio/gpio-vf610.c +++ b/drivers/gpio/gpio-vf610.c @@ -106,8 +106,6 @@ static int vf610_gpio_probe(struct device_d *dev) const __be32 *gpio_ranges; port = xzalloc(sizeof(*port)); - if (!port) - return -ENOMEM; gpio_ranges = of_get_property(dev->device_node, "gpio-ranges", &size); if (!gpio_ranges) { diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 67d771bae3..b83a27de7d 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -204,6 +204,10 @@ EXPORT_SYMBOL(gpio_set_value); void gpio_set_active(unsigned gpio, bool value) { struct gpio_info *gi = gpio_to_desc(gpio); + + if (!gi) + return; + gpio_set_value(gpio, gpio_adjust_value(gi, value)); } EXPORT_SYMBOL(gpio_set_active); @@ -229,6 +233,10 @@ EXPORT_SYMBOL(gpio_get_value); int gpio_is_active(unsigned gpio) { struct gpio_info *gi = gpio_to_desc(gpio); + + if (!gi) + return -ENODEV; + return gpio_adjust_value(gi, gpio_get_value(gpio)); } EXPORT_SYMBOL(gpio_is_active); @@ -255,6 +263,10 @@ EXPORT_SYMBOL(gpio_direction_output); int gpio_direction_active(unsigned gpio, bool value) { struct gpio_info *gi = gpio_to_desc(gpio); + + if (!gi) + return -ENODEV; + return gpio_direction_output(gpio, gpio_adjust_value(gi, value)); } EXPORT_SYMBOL(gpio_direction_active); diff --git a/drivers/mci/mci-core.c b/drivers/mci/mci-core.c index 07911d43d7..208b7666d6 100644 --- a/drivers/mci/mci-core.c +++ b/drivers/mci/mci-core.c @@ -1682,10 +1682,13 @@ static int mci_card_probe(struct mci *mci) } /* Check if this card can handle the "SD Card Physical Layer Specification 2.0" */ - rc = sd_send_if_cond(mci); - rc = sd_send_op_cond(mci); - if (rc && rc == -ETIMEDOUT) { - /* If the command timed out, we check for an MMC card */ + if (!host->no_sd) { + rc = sd_send_if_cond(mci); + rc = sd_send_op_cond(mci); + } + if (host->no_sd || rc == -ETIMEDOUT) { + /* If SD card initialization was skipped or if it timed out, + * we check for an MMC card */ dev_dbg(&mci->dev, "Card seems to be a MultiMediaCard\n"); rc = mmc_send_op_cond(mci); } @@ -1904,6 +1907,7 @@ void mci_of_parse_node(struct mci_host *host, } host->non_removable = of_property_read_bool(np, "non-removable"); + host->no_sd = of_property_read_bool(np, "no-sd"); } void mci_of_parse(struct mci_host *host) diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c index 299cc15c3d..0b9071c9bc 100644 --- a/drivers/mtd/nand/atmel_nand.c +++ b/drivers/mtd/nand/atmel_nand.c @@ -898,8 +898,6 @@ static int __init atmel_pmecc_nand_init_params(struct device_d *dev, /* Set pmecc_rom_base as the begin of gf table */ int size = sector_size == 512 ? 0x2000 : 0x4000; pmecc_galois_table = xzalloc(2 * size * sizeof(uint16_t)); - if (!pmecc_galois_table) - return -ENOMEM; host->pmecc_rom_base = pmecc_galois_table; ret = pmecc_build_galois_table((sector_size == 512) ? PMECC_GF_DIMENSION_13 : diff --git a/drivers/mtd/spi-nor/Kconfig b/drivers/mtd/spi-nor/Kconfig index a84591fdd1..51cebcf35b 100644 --- a/drivers/mtd/spi-nor/Kconfig +++ b/drivers/mtd/spi-nor/Kconfig @@ -7,6 +7,19 @@ menuconfig MTD_SPI_NOR if MTD_SPI_NOR +config MTD_SPI_NOR_USE_4K_SECTORS + bool "Use small 4096 B erase sectors" + help + Many flash memories support erasing small (4096 B) sectors. Depending + on the usage this feature may provide performance gain in comparison + to erasing whole blocks (32/64 KiB). + Changing a small part of the flash's contents is usually faster with + small sectors. On the other hand erasing should be faster when using + 64 KiB block instead of 16 × 4 KiB sectors. + + Please note that some tools/drivers/filesystems may not work with + 4096 B erase size (e.g. UBIFS requires 15 KiB as a minimum). + config SPI_CADENCE_QUADSPI tristate "Cadence Quad SPI controller" help diff --git a/drivers/mtd/ubi/attach.c b/drivers/mtd/ubi/attach.c index b49842be39..ff4b4e7acb 100644 --- a/drivers/mtd/ubi/attach.c +++ b/drivers/mtd/ubi/attach.c @@ -782,7 +782,7 @@ static int check_corruption(struct ubi_device *ubi, struct ubi_vid_hdr *vid_hdr, pnum); ubi_err(ubi, "this may be a non-UBI PEB or a severe VID header corruption which requires manual inspection"); ubi_dump_vid_hdr(vid_hdr); - pr_err("hexdump of PEB %d offset %d, length %d", + pr_err("hexdump of PEB %d offset %d, length %d\n", pnum, ubi->leb_start, ubi->leb_size); ubi_dbg_print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1, ubi->peb_buf, ubi->leb_size, 1); diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index ac698332cf..9b2f781d9c 100644 --- a/drivers/net/gianfar.c +++ b/drivers/net/gianfar.c @@ -483,9 +483,6 @@ static int gfar_probe(struct device_d *dev) priv = xzalloc(sizeof(struct gfar_private)); - if (NULL == priv) - return -ENODEV; - edev = &priv->edev; priv->mdiobus_tbi = gfar_info->mdiobus_tbi; diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c index ea5a4a9be2..73d6453b36 100644 --- a/drivers/net/phy/marvell.c +++ b/drivers/net/phy/marvell.c @@ -175,13 +175,78 @@ static inline bool phy_interface_is_rgmii(struct phy_device *phydev) }; /* - * This same function in the Linux kernel parses the marvell,reg-init dt - * property and does the necessary register writes. It's kept as an exercise for - * a future user to implement this. :-) + * Set and/or override some configuration registers based on the + * marvell,reg-init property stored in the of_node for the phydev. + * + * marvell,reg-init = <reg-page reg mask value>,...; + * + * There may be one or more sets of <reg-page reg mask value>: + * + * reg-page: which register bank to use. + * reg: the register. + * mask: if non-zero, ANDed with existing register value. + * value: ORed with the masked value and written to the regiser. + * */ static int marvell_of_reg_init(struct phy_device *phydev) { - return 0; + const __be32 *paddr; + int len, i, saved_page, current_page, page_changed, ret; + + if (!phydev->dev.device_node) + return 0; + + paddr = of_get_property(phydev->dev.device_node, + "marvell,reg-init", &len); + if (!paddr || len < (4 * sizeof(*paddr))) + return 0; + + saved_page = phy_read(phydev, MII_MARVELL_PHY_PAGE); + if (saved_page < 0) + return saved_page; + page_changed = 0; + current_page = saved_page; + + ret = 0; + len /= sizeof(*paddr); + for (i = 0; i < len - 3; i += 4) { + u16 reg_page = be32_to_cpup(paddr + i); + u16 reg = be32_to_cpup(paddr + i + 1); + u16 mask = be32_to_cpup(paddr + i + 2); + u16 val_bits = be32_to_cpup(paddr + i + 3); + int val; + + if (reg_page != current_page) { + current_page = reg_page; + page_changed = 1; + ret = phy_write(phydev, MII_MARVELL_PHY_PAGE, reg_page); + if (ret < 0) + goto err; + } + + val = 0; + if (mask) { + val = phy_read(phydev, reg); + if (val < 0) { + ret = val; + goto err; + } + val &= mask; + } + val |= val_bits; + + ret = phy_write(phydev, reg, val); + if (ret < 0) + goto err; + + } +err: + if (page_changed) { + i = phy_write(phydev, MII_MARVELL_PHY_PAGE, saved_page); + if (ret == 0) + ret = i; + } + return ret; } static int m88e1121_config_aneg(struct phy_device *phydev) diff --git a/drivers/of/base.c b/drivers/of/base.c index 3ca13ae44e..eabbf3d957 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -194,8 +194,6 @@ void of_alias_scan(void) /* Allocate an alias_prop with enough space for the stem */ ap = xzalloc(sizeof(*ap) + len + 1); - if (!ap) - continue; ap->alias = start; of_alias_add(ap, np, id, start, len); } diff --git a/drivers/pci/pci-imx6.c b/drivers/pci/pci-imx6.c index affc705d0a..fc56a0d14a 100644 --- a/drivers/pci/pci-imx6.c +++ b/drivers/pci/pci-imx6.c @@ -580,8 +580,6 @@ static int __init imx6_pcie_probe(struct device_d *dev) int ret; imx6_pcie = xzalloc(sizeof(*imx6_pcie)); - if (!imx6_pcie) - return -ENOMEM; pp = &imx6_pcie->pp; pp->dev = dev; diff --git a/drivers/pinctrl/pinctrl-mxs.c b/drivers/pinctrl/pinctrl-mxs.c index fa1176fe1b..479c31a426 100644 --- a/drivers/pinctrl/pinctrl-mxs.c +++ b/drivers/pinctrl/pinctrl-mxs.c @@ -52,7 +52,7 @@ static int mxs_pinctrl_set_state(struct pinctrl_device *pdev, struct device_node return -EINVAL; if (!size || size % 4) { - dev_err(iomux->pinctrl.dev, "Invalid fsl,pins property in %s\n", + dev_err(iomux->pinctrl.dev, "Invalid fsl,pinmux-ids property in %s\n", np->full_name); return -EINVAL; } diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c index 1130f3d845..58f2c4af26 100644 --- a/drivers/pinctrl/pinctrl-rockchip.c +++ b/drivers/pinctrl/pinctrl-rockchip.c @@ -412,8 +412,6 @@ static int rockchip_pinctrl_probe(struct device_d *dev) int ret; info = xzalloc(sizeof(struct rockchip_pinctrl)); - if (!info) - return -ENOMEM; ctrl = rockchip_pinctrl_get_soc_data(info, dev); if (!ctrl) { diff --git a/drivers/usb/gadget/pxa27x_udc.c b/drivers/usb/gadget/pxa27x_udc.c index 372c07b418..4e6b858868 100644 --- a/drivers/usb/gadget/pxa27x_udc.c +++ b/drivers/usb/gadget/pxa27x_udc.c @@ -218,8 +218,6 @@ static struct usb_request *pxa_ep_alloc_request(struct usb_ep *_ep) struct pxa27x_request *req; req = xzalloc(sizeof *req); - if (!req) - return NULL; INIT_LIST_HEAD(&req->queue); req->in_use = 0; diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c index 32a8f06529..68d819af2c 100644 --- a/drivers/usb/musb/musb_host.c +++ b/drivers/usb/musb/musb_host.c @@ -1717,8 +1717,6 @@ int musb_host_alloc(struct musb *musb) { /* usbcore sets dev->driver_data to hcd, and sometimes uses that... */ musb->hcd = xzalloc(sizeof(struct usb_hcd)); - if (!musb->hcd) - return -EINVAL; musb->hcd->hcd_priv = musb; diff --git a/drivers/usb/musb/phy-am335x-control.c b/drivers/usb/musb/phy-am335x-control.c index 5fd8802b3a..55a2ed27b7 100644 --- a/drivers/usb/musb/phy-am335x-control.c +++ b/drivers/usb/musb/phy-am335x-control.c @@ -140,10 +140,6 @@ static int am335x_control_usb_probe(struct device_d *dev) return ret; ctrl_usb = xzalloc(sizeof(*ctrl_usb)); - if (!ctrl_usb) { - dev_err(dev, "unable to alloc memory for control usb\n"); - return -ENOMEM; - } ctrl_usb->dev = dev; diff --git a/drivers/usb/musb/phy-am335x.c b/drivers/usb/musb/phy-am335x.c index 204e51054d..ec8c0f538b 100644 --- a/drivers/usb/musb/phy-am335x.c +++ b/drivers/usb/musb/phy-am335x.c @@ -34,8 +34,6 @@ static int am335x_phy_probe(struct device_d *dev) int ret; am_usbphy = xzalloc(sizeof(*am_usbphy)); - if (!am_usbphy) - return -ENOMEM; iores = dev_request_mem_resource(dev, 0); if (IS_ERR(iores)) { diff --git a/drivers/video/backlight-pwm.c b/drivers/video/backlight-pwm.c index 2915dba174..ec35bd1bc0 100644 --- a/drivers/video/backlight-pwm.c +++ b/drivers/video/backlight-pwm.c @@ -147,8 +147,6 @@ static int pwm_backlight_parse_dt(struct device_d *dev, size_t size = sizeof(*pwm_backlight->levels) * length; pwm_backlight->levels = xzalloc(size); - if (!pwm_backlight->levels) - return -ENOMEM; ret = of_property_read_u32_array(node, "brightness-levels", pwm_backlight->levels, diff --git a/drivers/video/tc358767.c b/drivers/video/tc358767.c index 2d366ae662..f9ca06c62b 100644 --- a/drivers/video/tc358767.c +++ b/drivers/video/tc358767.c @@ -1352,8 +1352,6 @@ static int tc_probe(struct device_d *dev) int ret; tc = xzalloc(sizeof(struct tc_data)); - if (!tc) - return -ENOMEM; tc->client = client; tc->dev = dev; |