dev->reg_gpio_num = EM2874_R80_GPIO;
                        dev->wait_after_write = 0;
                        break;
+               case CHIP_ID_EM28174:
+                       em28xx_info("chip ID is em28174\n");
+                       dev->reg_gpio_num = EM2874_R80_GPIO;
+                       dev->wait_after_write = 0;
+                       break;
                case CHIP_ID_EM2883:
                        em28xx_info("chip ID is em2882/em2883\n");
                        dev->wait_after_write = 0;
 
 {
        int rc;
 
-       if (dev->chip_id == CHIP_ID_EM2874) {
+       if (dev->chip_id == CHIP_ID_EM2874 || dev->chip_id == CHIP_ID_EM28174) {
                /* The Transport Stream Enable Register moved in em2874 */
                if (!start) {
                        rc = em28xx_write_reg_bits(dev, EM2874_R5F_TS_ENABLE,
                /* FIXME - for now assume 564 like it was before, but the
                   em2874 code should be added to return the proper value... */
                packet_size = 564;
+       } else if (dev->chip_id == CHIP_ID_EM28174) {
+               /* FIXME same as em2874. 564 was enough for 22 Mbit DVB-T
+                  but too much for 44 Mbit DVB-C. */
+               packet_size = 752;
        } else {
                /* TS max packet size stored in bits 1-0 of R01 */
                chip_cfg2 = em28xx_read_reg(dev, EM28XX_R01_CHIPCFG2);
 
        struct em28xx_eeprom *em_eeprom = (void *)eedata;
        int i, err, size = len, block;
 
-       if (dev->chip_id == CHIP_ID_EM2874) {
+       if (dev->chip_id == CHIP_ID_EM2874 || dev->chip_id == CHIP_ID_EM28174) {
                /* Empia switched to a 16-bit addressable eeprom in newer
                   devices.  While we could certainly write a routine to read
                   the eeprom, there is nothing of use in there that cannot be