Re: [PATCHv2 5/5] adv7842: enable reduced fps detection

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hans,

I love your patch! Yet something to improve:

[auto build test ERROR on linuxtv-media/master]
[also build test ERROR on v4.18 next-20180815]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Hans-Verkuil/Handling-of-reduced-FPS-in-V4L2/20180816-051924
base:   git://linuxtv.org/media_tree.git master
config: i386-randconfig-a0-201832 (attached as .config)
compiler: gcc-4.9 (Debian 4.9.4-2) 4.9.4
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

   drivers/media/i2c/adv7842.o: In function `adv7842_query_dv_timings':
>> drivers/media/i2c/adv7842.c:1602: undefined reference to `__udivdi3'

vim +1602 drivers/media/i2c/adv7842.c

  1530	
  1531	static int adv7842_query_dv_timings(struct v4l2_subdev *sd,
  1532					    struct v4l2_dv_timings *timings)
  1533	{
  1534		struct adv7842_state *state = to_state(sd);
  1535		struct v4l2_bt_timings *bt = &timings->bt;
  1536		struct stdi_readback stdi = { 0 };
  1537	
  1538		v4l2_dbg(1, debug, sd, "%s:\n", __func__);
  1539	
  1540		memset(timings, 0, sizeof(struct v4l2_dv_timings));
  1541	
  1542		/* SDP block */
  1543		if (state->mode == ADV7842_MODE_SDP)
  1544			return -ENODATA;
  1545	
  1546		/* read STDI */
  1547		if (read_stdi(sd, &stdi)) {
  1548			state->restart_stdi_once = true;
  1549			v4l2_dbg(1, debug, sd, "%s: no valid signal\n", __func__);
  1550			return -ENOLINK;
  1551		}
  1552		bt->interlaced = stdi.interlaced ?
  1553			V4L2_DV_INTERLACED : V4L2_DV_PROGRESSIVE;
  1554		bt->standards = V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
  1555				V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT;
  1556	
  1557		if (is_digital_input(sd)) {
  1558			u32 freq;
  1559	
  1560			timings->type = V4L2_DV_BT_656_1120;
  1561	
  1562			bt->width = (hdmi_read(sd, 0x07) & 0x0f) * 256 + hdmi_read(sd, 0x08);
  1563			bt->height = (hdmi_read(sd, 0x09) & 0x0f) * 256 + hdmi_read(sd, 0x0a);
  1564			freq = ((hdmi_read(sd, 0x51) << 1) + (hdmi_read(sd, 0x52) >> 7)) * 1000000;
  1565			freq += ((hdmi_read(sd, 0x52) & 0x7f) * 7813);
  1566			if (is_hdmi(sd)) {
  1567				/* adjust for deep color mode */
  1568				freq = freq * 8 / (((hdmi_read(sd, 0x0b) & 0xc0) >> 6) * 2 + 8);
  1569			}
  1570			bt->pixelclock = freq;
  1571			bt->hfrontporch = (hdmi_read(sd, 0x20) & 0x03) * 256 +
  1572				hdmi_read(sd, 0x21);
  1573			bt->hsync = (hdmi_read(sd, 0x22) & 0x03) * 256 +
  1574				hdmi_read(sd, 0x23);
  1575			bt->hbackporch = (hdmi_read(sd, 0x24) & 0x03) * 256 +
  1576				hdmi_read(sd, 0x25);
  1577			bt->vfrontporch = ((hdmi_read(sd, 0x2a) & 0x1f) * 256 +
  1578				hdmi_read(sd, 0x2b)) / 2;
  1579			bt->vsync = ((hdmi_read(sd, 0x2e) & 0x1f) * 256 +
  1580				hdmi_read(sd, 0x2f)) / 2;
  1581			bt->vbackporch = ((hdmi_read(sd, 0x32) & 0x1f) * 256 +
  1582				hdmi_read(sd, 0x33)) / 2;
  1583			bt->polarities = ((hdmi_read(sd, 0x05) & 0x10) ? V4L2_DV_VSYNC_POS_POL : 0) |
  1584				((hdmi_read(sd, 0x05) & 0x20) ? V4L2_DV_HSYNC_POS_POL : 0);
  1585			if (bt->interlaced == V4L2_DV_INTERLACED) {
  1586				bt->height += (hdmi_read(sd, 0x0b) & 0x0f) * 256 +
  1587						hdmi_read(sd, 0x0c);
  1588				bt->il_vfrontporch = ((hdmi_read(sd, 0x2c) & 0x1f) * 256 +
  1589						hdmi_read(sd, 0x2d)) / 2;
  1590				bt->il_vsync = ((hdmi_read(sd, 0x30) & 0x1f) * 256 +
  1591						hdmi_read(sd, 0x31)) / 2;
  1592				bt->il_vbackporch = ((hdmi_read(sd, 0x34) & 0x1f) * 256 +
  1593						hdmi_read(sd, 0x35)) / 2;
  1594			} else {
  1595				bt->il_vfrontporch = 0;
  1596				bt->il_vsync = 0;
  1597				bt->il_vbackporch = 0;
  1598			}
  1599			adv7842_fill_optional_dv_timings_fields(sd, timings);
  1600			if ((timings->bt.flags & V4L2_DV_FL_CAN_REDUCE_FPS) &&
  1601			    freq < bt->pixelclock) {
> 1602				u32 reduced_freq = (bt->pixelclock / 1001) * 1000;
  1603				u32 delta_freq = abs(freq - reduced_freq);
  1604	
  1605				if (delta_freq < (bt->pixelclock - reduced_freq) / 2)
  1606					timings->bt.flags |= V4L2_DV_FL_REDUCED_FPS;
  1607			}
  1608		} else {
  1609			/* find format
  1610			 * Since LCVS values are inaccurate [REF_03, p. 339-340],
  1611			 * stdi2dv_timings() is called with lcvs +-1 if the first attempt fails.
  1612			 */
  1613			if (!stdi2dv_timings(sd, &stdi, timings))
  1614				goto found;
  1615			stdi.lcvs += 1;
  1616			v4l2_dbg(1, debug, sd, "%s: lcvs + 1 = %d\n", __func__, stdi.lcvs);
  1617			if (!stdi2dv_timings(sd, &stdi, timings))
  1618				goto found;
  1619			stdi.lcvs -= 2;
  1620			v4l2_dbg(1, debug, sd, "%s: lcvs - 1 = %d\n", __func__, stdi.lcvs);
  1621			if (stdi2dv_timings(sd, &stdi, timings)) {
  1622				/*
  1623				 * The STDI block may measure wrong values, especially
  1624				 * for lcvs and lcf. If the driver can not find any
  1625				 * valid timing, the STDI block is restarted to measure
  1626				 * the video timings again. The function will return an
  1627				 * error, but the restart of STDI will generate a new
  1628				 * STDI interrupt and the format detection process will
  1629				 * restart.
  1630				 */
  1631				if (state->restart_stdi_once) {
  1632					v4l2_dbg(1, debug, sd, "%s: restart STDI\n", __func__);
  1633					/* TODO restart STDI for Sync Channel 2 */
  1634					/* enter one-shot mode */
  1635					cp_write_and_or(sd, 0x86, 0xf9, 0x00);
  1636					/* trigger STDI restart */
  1637					cp_write_and_or(sd, 0x86, 0xf9, 0x04);
  1638					/* reset to continuous mode */
  1639					cp_write_and_or(sd, 0x86, 0xf9, 0x02);
  1640					state->restart_stdi_once = false;
  1641					return -ENOLINK;
  1642				}
  1643				v4l2_dbg(1, debug, sd, "%s: format not supported\n", __func__);
  1644				return -ERANGE;
  1645			}
  1646			state->restart_stdi_once = true;
  1647		}
  1648	found:
  1649	
  1650		if (debug > 1)
  1651			v4l2_print_dv_timings(sd->name, "adv7842_query_dv_timings:",
  1652					timings, true);
  1653		return 0;
  1654	}
  1655	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux