Commit 675285ad authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull fbdev updates from Helge Deller:
 "Some fbdev fixes & cleanups.

  Includes is a fix for a potential out-of-bound memory access
  in fast_imageblit() and the switch of the VIA fbdev driver to
  use GPIO descriptors.

  Summary:
   - fix potential OOB read in fast_imageblit()
   - fbdev/media: Use GPIO descriptors for VIA GPIO
   - broadsheetfb & metronomefb: Add MODULE_FIRMWARE macro
   - omapfb: error handling fix in mipid_spi_probe()
   - sh_mobile_lcdcfb, sh7760fb: Typo and warning fixes
   - hitfb: code cleanups"

* tag 'fbdev-for-6.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/linux-fbdev:
  fbdev: fix potential OOB read in fast_imageblit()
  MAINTAINERS: adjust entry in VIA UNICHROME(PRO)/CHROME9 FRAMEBUFFER DRIVER
  fbdev: sh7760fb: Fix -Wimplicit-fallthrough warnings
  fbdev: sh_mobile_lcdcfb: Fix ARGB32 overlay format typo
  fbdev: hitfb: Use NULL for pointers
  fbdev: hitfb: Fix integer-to-pointer cast
  fbdev/media: Use GPIO descriptors for VIA GPIO
  video/hdmi: Reorder fields in 'struct hdmi_avi_infoframe'
  fbdev: broadsheetfb: Add MODULE_FIRMWARE macro
  fbdev: metronomefb: Add MODULE_FIRMWARE macro
  fbdev: hitfb: Declare hitfb_blank() as static
  fbdev: omapfb: lcd_mipid: Fix an error handling path in mipid_spi_probe()
parents e5476f57 c2d22806
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -22277,7 +22277,6 @@ L: linux-fbdev@vger.kernel.org
S:	Maintained
F:	drivers/video/fbdev/via/
F:	include/linux/via-core.h
F:	include/linux/via-gpio.h
F:	include/linux/via_i2c.h
VIA VELOCITY NETWORK DRIVER
+20 −31
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@
#include <linux/device.h>
#include <linux/list.h>
#include <linux/pci.h>
#include <linux/gpio.h>
#include <linux/gpio/consumer.h>
#include <linux/interrupt.h>
#include <linux/platform_device.h>
#include <linux/videodev2.h>
@@ -26,7 +26,6 @@
#include <linux/dma-mapping.h>
#include <linux/pm_qos.h>
#include <linux/via-core.h>
#include <linux/via-gpio.h>
#include <linux/via_i2c.h>

#ifdef CONFIG_X86
@@ -71,8 +70,8 @@ struct via_camera {
	/*
	 * GPIO info for power/reset management
	 */
	int power_gpio;
	int reset_gpio;
	struct gpio_desc *power_gpio;
	struct gpio_desc *reset_gpio;
	/*
	 * I/O memory stuff.
	 */
@@ -180,27 +179,19 @@ static struct via_format *via_find_format(u32 pixelformat)
 */
static int via_sensor_power_setup(struct via_camera *cam)
{
	int ret;
	struct device *dev = &cam->platdev->dev;

	cam->power_gpio = devm_gpiod_get(dev, "VGPIO3", GPIOD_OUT_LOW);
	if (IS_ERR(cam->power_gpio))
		return dev_err_probe(dev, PTR_ERR(cam->power_gpio),
				     "failed to get power GPIO");

	/* Request the reset line asserted */
	cam->reset_gpio = devm_gpiod_get(dev, "VGPIO2", GPIOD_OUT_HIGH);
	if (IS_ERR(cam->reset_gpio))
		return dev_err_probe(dev, PTR_ERR(cam->reset_gpio),
				     "failed to get reset GPIO");

	cam->power_gpio = viafb_gpio_lookup("VGPIO3");
	cam->reset_gpio = viafb_gpio_lookup("VGPIO2");
	if (!gpio_is_valid(cam->power_gpio) || !gpio_is_valid(cam->reset_gpio)) {
		dev_err(&cam->platdev->dev, "Unable to find GPIO lines\n");
		return -EINVAL;
	}
	ret = gpio_request(cam->power_gpio, "viafb-camera");
	if (ret) {
		dev_err(&cam->platdev->dev, "Unable to request power GPIO\n");
		return ret;
	}
	ret = gpio_request(cam->reset_gpio, "viafb-camera");
	if (ret) {
		dev_err(&cam->platdev->dev, "Unable to request reset GPIO\n");
		gpio_free(cam->power_gpio);
		return ret;
	}
	gpio_direction_output(cam->power_gpio, 0);
	gpio_direction_output(cam->reset_gpio, 0);
	return 0;
}

@@ -209,25 +200,23 @@ static int via_sensor_power_setup(struct via_camera *cam)
 */
static void via_sensor_power_up(struct via_camera *cam)
{
	gpio_set_value(cam->power_gpio, 1);
	gpio_set_value(cam->reset_gpio, 0);
	gpiod_set_value(cam->power_gpio, 1);
	gpiod_set_value(cam->reset_gpio, 1);
	msleep(20);  /* Probably excessive */
	gpio_set_value(cam->reset_gpio, 1);
	gpiod_set_value(cam->reset_gpio, 0);
	msleep(20);
}

static void via_sensor_power_down(struct via_camera *cam)
{
	gpio_set_value(cam->power_gpio, 0);
	gpio_set_value(cam->reset_gpio, 0);
	gpiod_set_value(cam->power_gpio, 0);
	gpiod_set_value(cam->reset_gpio, 1);
}


static void via_sensor_power_release(struct via_camera *cam)
{
	via_sensor_power_down(cam);
	gpio_free(cam->power_gpio);
	gpio_free(cam->reset_gpio);
}

/* --------------------------------------------------------------------------*/
+2 −0
Original line number Diff line number Diff line
@@ -1223,3 +1223,5 @@ module_platform_driver(broadsheetfb_driver);
MODULE_DESCRIPTION("fbdev driver for Broadsheet controller");
MODULE_AUTHOR("Jaya Kumar");
MODULE_LICENSE("GPL");

MODULE_FIRMWARE("broadsheet.wbf");
+1 −1
Original line number Diff line number Diff line
@@ -189,7 +189,7 @@ static void fast_imageblit(const struct fb_image *image, struct fb_info *p,
	u32 fgx = fgcolor, bgx = bgcolor, bpp = p->var.bits_per_pixel;
	u32 ppw = 32/bpp, spitch = (image->width + 7)/8;
	u32 bit_mask, eorx, shift;
	const char *s = image->data, *src;
	const u8 *s = image->data, *src;
	u32 *dst;
	const u32 *tab;
	size_t tablen;
+4 −4
Original line number Diff line number Diff line
@@ -167,7 +167,7 @@ static int hitfb_pan_display(struct fb_var_screeninfo *var,
	return 0;
}

int hitfb_blank(int blank_mode, struct fb_info *info)
static int hitfb_blank(int blank_mode, struct fb_info *info)
{
	unsigned short v;

@@ -392,7 +392,7 @@ static int hitfb_probe(struct platform_device *dev)
	info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN |
		FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_COPYAREA;

	info->screen_base = (void *)hitfb_fix.smem_start;
	info->screen_base = (char __iomem *)(uintptr_t)hitfb_fix.smem_start;

	ret = fb_alloc_cmap(&info->cmap, 256, 0);
	if (unlikely(ret < 0))
@@ -428,7 +428,7 @@ static int hitfb_suspend(struct device *dev)
{
	u16 v;

	hitfb_blank(1,0);
	hitfb_blank(1, NULL);
	v = fb_readw(HD64461_STBCR);
	v |= HD64461_STBCR_SLCKE_IST;
	fb_writew(v, HD64461_STBCR);
@@ -446,7 +446,7 @@ static int hitfb_resume(struct device *dev)
	v = fb_readw(HD64461_STBCR);
	v &= ~HD64461_STBCR_SLCKE_IST;
	fb_writew(v, HD64461_STBCR);
	hitfb_blank(0,0);
	hitfb_blank(0, NULL);

	return 0;
}
Loading