linux/drivers/media/pci/pt1/pt1.c
<<
>>
Prefs
   1/*
   2 * driver for Earthsoft PT1/PT2
   3 *
   4 * Copyright (C) 2009 HIRANO Takahito <hiranotaka@zng.info>
   5 *
   6 * based on pt1dvr - http://pt1dvr.sourceforge.jp/
   7 *      by Tomoaki Ishikawa <tomy@users.sourceforge.jp>
   8 *
   9 * This program is free software; you can redistribute it and/or modify
  10 * it under the terms of the GNU General Public License as published by
  11 * the Free Software Foundation; either version 2 of the License, or
  12 * (at your option) any later version.
  13 *
  14 * This program is distributed in the hope that it will be useful,
  15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17 * GNU General Public License for more details.
  18 */
  19
  20#include <linux/kernel.h>
  21#include <linux/sched.h>
  22#include <linux/sched/signal.h>
  23#include <linux/hrtimer.h>
  24#include <linux/delay.h>
  25#include <linux/module.h>
  26#include <linux/slab.h>
  27#include <linux/vmalloc.h>
  28#include <linux/pci.h>
  29#include <linux/kthread.h>
  30#include <linux/freezer.h>
  31#include <linux/ratelimit.h>
  32#include <linux/string.h>
  33#include <linux/i2c.h>
  34
  35#include <media/dvbdev.h>
  36#include <media/dvb_demux.h>
  37#include <media/dmxdev.h>
  38#include <media/dvb_net.h>
  39#include <media/dvb_frontend.h>
  40
  41#include "tc90522.h"
  42#include "qm1d1b0004.h"
  43#include "dvb-pll.h"
  44
  45#define DRIVER_NAME "earth-pt1"
  46
  47#define PT1_PAGE_SHIFT 12
  48#define PT1_PAGE_SIZE (1 << PT1_PAGE_SHIFT)
  49#define PT1_NR_UPACKETS 1024
  50#define PT1_NR_BUFS 511
  51
  52struct pt1_buffer_page {
  53        __le32 upackets[PT1_NR_UPACKETS];
  54};
  55
  56struct pt1_table_page {
  57        __le32 next_pfn;
  58        __le32 buf_pfns[PT1_NR_BUFS];
  59};
  60
  61struct pt1_buffer {
  62        struct pt1_buffer_page *page;
  63        dma_addr_t addr;
  64};
  65
  66struct pt1_table {
  67        struct pt1_table_page *page;
  68        dma_addr_t addr;
  69        struct pt1_buffer bufs[PT1_NR_BUFS];
  70};
  71
  72enum pt1_fe_clk {
  73        PT1_FE_CLK_20MHZ,       /* PT1 */
  74        PT1_FE_CLK_25MHZ,       /* PT2 */
  75};
  76
  77#define PT1_NR_ADAPS 4
  78
  79struct pt1_adapter;
  80
  81struct pt1 {
  82        struct pci_dev *pdev;
  83        void __iomem *regs;
  84        struct i2c_adapter i2c_adap;
  85        int i2c_running;
  86        struct pt1_adapter *adaps[PT1_NR_ADAPS];
  87        struct pt1_table *tables;
  88        struct task_struct *kthread;
  89        int table_index;
  90        int buf_index;
  91
  92        struct mutex lock;
  93        int power;
  94        int reset;
  95
  96        enum pt1_fe_clk fe_clk;
  97};
  98
  99struct pt1_adapter {
 100        struct pt1 *pt1;
 101        int index;
 102
 103        u8 *buf;
 104        int upacket_count;
 105        int packet_count;
 106        int st_count;
 107
 108        struct dvb_adapter adap;
 109        struct dvb_demux demux;
 110        int users;
 111        struct dmxdev dmxdev;
 112        struct dvb_frontend *fe;
 113        struct i2c_client *demod_i2c_client;
 114        struct i2c_client *tuner_i2c_client;
 115        int (*orig_set_voltage)(struct dvb_frontend *fe,
 116                                enum fe_sec_voltage voltage);
 117        int (*orig_sleep)(struct dvb_frontend *fe);
 118        int (*orig_init)(struct dvb_frontend *fe);
 119
 120        enum fe_sec_voltage voltage;
 121        int sleep;
 122};
 123
 124union pt1_tuner_config {
 125        struct qm1d1b0004_config qm1d1b0004;
 126        struct dvb_pll_config tda6651;
 127};
 128
 129struct pt1_config {
 130        struct i2c_board_info demod_info;
 131        struct tc90522_config demod_cfg;
 132
 133        struct i2c_board_info tuner_info;
 134        union pt1_tuner_config tuner_cfg;
 135};
 136
 137static const struct pt1_config pt1_configs[PT1_NR_ADAPS] = {
 138        {
 139                .demod_info = {
 140                        I2C_BOARD_INFO(TC90522_I2C_DEV_SAT, 0x1b),
 141                },
 142                .tuner_info = {
 143                        I2C_BOARD_INFO("qm1d1b0004", 0x60),
 144                },
 145        },
 146        {
 147                .demod_info = {
 148                        I2C_BOARD_INFO(TC90522_I2C_DEV_TER, 0x1a),
 149                },
 150                .tuner_info = {
 151                        I2C_BOARD_INFO("tda665x_earthpt1", 0x61),
 152                },
 153        },
 154        {
 155                .demod_info = {
 156                        I2C_BOARD_INFO(TC90522_I2C_DEV_SAT, 0x19),
 157                },
 158                .tuner_info = {
 159                        I2C_BOARD_INFO("qm1d1b0004", 0x60),
 160                },
 161        },
 162        {
 163                .demod_info = {
 164                        I2C_BOARD_INFO(TC90522_I2C_DEV_TER, 0x18),
 165                },
 166                .tuner_info = {
 167                        I2C_BOARD_INFO("tda665x_earthpt1", 0x61),
 168                },
 169        },
 170};
 171
 172static const u8 va1j5jf8007s_20mhz_configs[][2] = {
 173        {0x04, 0x02}, {0x0d, 0x55}, {0x11, 0x40}, {0x13, 0x80}, {0x17, 0x01},
 174        {0x1c, 0x0a}, {0x1d, 0xaa}, {0x1e, 0x20}, {0x1f, 0x88}, {0x51, 0xb0},
 175        {0x52, 0x89}, {0x53, 0xb3}, {0x5a, 0x2d}, {0x5b, 0xd3}, {0x85, 0x69},
 176        {0x87, 0x04}, {0x8e, 0x02}, {0xa3, 0xf7}, {0xa5, 0xc0},
 177};
 178
 179static const u8 va1j5jf8007s_25mhz_configs[][2] = {
 180        {0x04, 0x02}, {0x11, 0x40}, {0x13, 0x80}, {0x17, 0x01}, {0x1c, 0x0a},
 181        {0x1d, 0xaa}, {0x1e, 0x20}, {0x1f, 0x88}, {0x51, 0xb0}, {0x52, 0x89},
 182        {0x53, 0xb3}, {0x5a, 0x2d}, {0x5b, 0xd3}, {0x85, 0x69}, {0x87, 0x04},
 183        {0x8e, 0x26}, {0xa3, 0xf7}, {0xa5, 0xc0},
 184};
 185
 186static const u8 va1j5jf8007t_20mhz_configs[][2] = {
 187        {0x03, 0x90}, {0x14, 0x8f}, {0x1c, 0x2a}, {0x1d, 0xa8}, {0x1e, 0xa2},
 188        {0x22, 0x83}, {0x31, 0x0d}, {0x32, 0xe0}, {0x39, 0xd3}, {0x3a, 0x00},
 189        {0x3b, 0x11}, {0x3c, 0x3f},
 190        {0x5c, 0x40}, {0x5f, 0x80}, {0x75, 0x02}, {0x76, 0x4e}, {0x77, 0x03},
 191        {0xef, 0x01}
 192};
 193
 194static const u8 va1j5jf8007t_25mhz_configs[][2] = {
 195        {0x03, 0x90}, {0x1c, 0x2a}, {0x1d, 0xa8}, {0x1e, 0xa2}, {0x22, 0x83},
 196        {0x3a, 0x04}, {0x3b, 0x11}, {0x3c, 0x3f}, {0x5c, 0x40}, {0x5f, 0x80},
 197        {0x75, 0x0a}, {0x76, 0x4c}, {0x77, 0x03}, {0xef, 0x01}
 198};
 199
 200static int config_demod(struct i2c_client *cl, enum pt1_fe_clk clk)
 201{
 202        int ret;
 203        u8 buf[2] = {0x01, 0x80};
 204        bool is_sat;
 205        const u8 (*cfg_data)[2];
 206        int i, len;
 207
 208        ret = i2c_master_send(cl, buf, 2);
 209        if (ret < 0)
 210                return ret;
 211        usleep_range(30000, 50000);
 212
 213        is_sat = !strncmp(cl->name, TC90522_I2C_DEV_SAT,
 214                          strlen(TC90522_I2C_DEV_SAT));
 215        if (is_sat) {
 216                struct i2c_msg msg[2];
 217                u8 wbuf, rbuf;
 218
 219                wbuf = 0x07;
 220                msg[0].addr = cl->addr;
 221                msg[0].flags = 0;
 222                msg[0].len = 1;
 223                msg[0].buf = &wbuf;
 224
 225                msg[1].addr = cl->addr;
 226                msg[1].flags = I2C_M_RD;
 227                msg[1].len = 1;
 228                msg[1].buf = &rbuf;
 229                ret = i2c_transfer(cl->adapter, msg, 2);
 230                if (ret < 0)
 231                        return ret;
 232                if (rbuf != 0x41)
 233                        return -EIO;
 234        }
 235
 236        /* frontend init */
 237        if (clk == PT1_FE_CLK_20MHZ) {
 238                if (is_sat) {
 239                        cfg_data = va1j5jf8007s_20mhz_configs;
 240                        len = ARRAY_SIZE(va1j5jf8007s_20mhz_configs);
 241                } else {
 242                        cfg_data = va1j5jf8007t_20mhz_configs;
 243                        len = ARRAY_SIZE(va1j5jf8007t_20mhz_configs);
 244                }
 245        } else {
 246                if (is_sat) {
 247                        cfg_data = va1j5jf8007s_25mhz_configs;
 248                        len = ARRAY_SIZE(va1j5jf8007s_25mhz_configs);
 249                } else {
 250                        cfg_data = va1j5jf8007t_25mhz_configs;
 251                        len = ARRAY_SIZE(va1j5jf8007t_25mhz_configs);
 252                }
 253        }
 254
 255        for (i = 0; i < len; i++) {
 256                ret = i2c_master_send(cl, cfg_data[i], 2);
 257                if (ret < 0)
 258                        return ret;
 259        }
 260        return 0;
 261}
 262
 263static void pt1_write_reg(struct pt1 *pt1, int reg, u32 data)
 264{
 265        writel(data, pt1->regs + reg * 4);
 266}
 267
 268static u32 pt1_read_reg(struct pt1 *pt1, int reg)
 269{
 270        return readl(pt1->regs + reg * 4);
 271}
 272
 273static unsigned int pt1_nr_tables = 8;
 274module_param_named(nr_tables, pt1_nr_tables, uint, 0);
 275
 276static void pt1_increment_table_count(struct pt1 *pt1)
 277{
 278        pt1_write_reg(pt1, 0, 0x00000020);
 279}
 280
 281static void pt1_init_table_count(struct pt1 *pt1)
 282{
 283        pt1_write_reg(pt1, 0, 0x00000010);
 284}
 285
 286static void pt1_register_tables(struct pt1 *pt1, u32 first_pfn)
 287{
 288        pt1_write_reg(pt1, 5, first_pfn);
 289        pt1_write_reg(pt1, 0, 0x0c000040);
 290}
 291
 292static void pt1_unregister_tables(struct pt1 *pt1)
 293{
 294        pt1_write_reg(pt1, 0, 0x08080000);
 295}
 296
 297static int pt1_sync(struct pt1 *pt1)
 298{
 299        int i;
 300        for (i = 0; i < 57; i++) {
 301                if (pt1_read_reg(pt1, 0) & 0x20000000)
 302                        return 0;
 303                pt1_write_reg(pt1, 0, 0x00000008);
 304        }
 305        dev_err(&pt1->pdev->dev, "could not sync\n");
 306        return -EIO;
 307}
 308
 309static u64 pt1_identify(struct pt1 *pt1)
 310{
 311        int i;
 312        u64 id;
 313        id = 0;
 314        for (i = 0; i < 57; i++) {
 315                id |= (u64)(pt1_read_reg(pt1, 0) >> 30 & 1) << i;
 316                pt1_write_reg(pt1, 0, 0x00000008);
 317        }
 318        return id;
 319}
 320
 321static int pt1_unlock(struct pt1 *pt1)
 322{
 323        int i;
 324        pt1_write_reg(pt1, 0, 0x00000008);
 325        for (i = 0; i < 3; i++) {
 326                if (pt1_read_reg(pt1, 0) & 0x80000000)
 327                        return 0;
 328                usleep_range(1000, 2000);
 329        }
 330        dev_err(&pt1->pdev->dev, "could not unlock\n");
 331        return -EIO;
 332}
 333
 334static int pt1_reset_pci(struct pt1 *pt1)
 335{
 336        int i;
 337        pt1_write_reg(pt1, 0, 0x01010000);
 338        pt1_write_reg(pt1, 0, 0x01000000);
 339        for (i = 0; i < 10; i++) {
 340                if (pt1_read_reg(pt1, 0) & 0x00000001)
 341                        return 0;
 342                usleep_range(1000, 2000);
 343        }
 344        dev_err(&pt1->pdev->dev, "could not reset PCI\n");
 345        return -EIO;
 346}
 347
 348static int pt1_reset_ram(struct pt1 *pt1)
 349{
 350        int i;
 351        pt1_write_reg(pt1, 0, 0x02020000);
 352        pt1_write_reg(pt1, 0, 0x02000000);
 353        for (i = 0; i < 10; i++) {
 354                if (pt1_read_reg(pt1, 0) & 0x00000002)
 355                        return 0;
 356                usleep_range(1000, 2000);
 357        }
 358        dev_err(&pt1->pdev->dev, "could not reset RAM\n");
 359        return -EIO;
 360}
 361
 362static int pt1_do_enable_ram(struct pt1 *pt1)
 363{
 364        int i, j;
 365        u32 status;
 366        status = pt1_read_reg(pt1, 0) & 0x00000004;
 367        pt1_write_reg(pt1, 0, 0x00000002);
 368        for (i = 0; i < 10; i++) {
 369                for (j = 0; j < 1024; j++) {
 370                        if ((pt1_read_reg(pt1, 0) & 0x00000004) != status)
 371                                return 0;
 372                }
 373                usleep_range(1000, 2000);
 374        }
 375        dev_err(&pt1->pdev->dev, "could not enable RAM\n");
 376        return -EIO;
 377}
 378
 379static int pt1_enable_ram(struct pt1 *pt1)
 380{
 381        int i, ret;
 382        int phase;
 383        usleep_range(1000, 2000);
 384        phase = pt1->pdev->device == 0x211a ? 128 : 166;
 385        for (i = 0; i < phase; i++) {
 386                ret = pt1_do_enable_ram(pt1);
 387                if (ret < 0)
 388                        return ret;
 389        }
 390        return 0;
 391}
 392
 393static void pt1_disable_ram(struct pt1 *pt1)
 394{
 395        pt1_write_reg(pt1, 0, 0x0b0b0000);
 396}
 397
 398static void pt1_set_stream(struct pt1 *pt1, int index, int enabled)
 399{
 400        pt1_write_reg(pt1, 2, 1 << (index + 8) | enabled << index);
 401}
 402
 403static void pt1_init_streams(struct pt1 *pt1)
 404{
 405        int i;
 406        for (i = 0; i < PT1_NR_ADAPS; i++)
 407                pt1_set_stream(pt1, i, 0);
 408}
 409
 410static int pt1_filter(struct pt1 *pt1, struct pt1_buffer_page *page)
 411{
 412        u32 upacket;
 413        int i;
 414        int index;
 415        struct pt1_adapter *adap;
 416        int offset;
 417        u8 *buf;
 418        int sc;
 419
 420        if (!page->upackets[PT1_NR_UPACKETS - 1])
 421                return 0;
 422
 423        for (i = 0; i < PT1_NR_UPACKETS; i++) {
 424                upacket = le32_to_cpu(page->upackets[i]);
 425                index = (upacket >> 29) - 1;
 426                if (index < 0 || index >=  PT1_NR_ADAPS)
 427                        continue;
 428
 429                adap = pt1->adaps[index];
 430                if (upacket >> 25 & 1)
 431                        adap->upacket_count = 0;
 432                else if (!adap->upacket_count)
 433                        continue;
 434
 435                if (upacket >> 24 & 1)
 436                        printk_ratelimited(KERN_INFO "earth-pt1: device buffer overflowing. table[%d] buf[%d]\n",
 437                                pt1->table_index, pt1->buf_index);
 438                sc = upacket >> 26 & 0x7;
 439                if (adap->st_count != -1 && sc != ((adap->st_count + 1) & 0x7))
 440                        printk_ratelimited(KERN_INFO "earth-pt1: data loss in streamID(adapter)[%d]\n",
 441                                           index);
 442                adap->st_count = sc;
 443
 444                buf = adap->buf;
 445                offset = adap->packet_count * 188 + adap->upacket_count * 3;
 446                buf[offset] = upacket >> 16;
 447                buf[offset + 1] = upacket >> 8;
 448                if (adap->upacket_count != 62)
 449                        buf[offset + 2] = upacket;
 450
 451                if (++adap->upacket_count >= 63) {
 452                        adap->upacket_count = 0;
 453                        if (++adap->packet_count >= 21) {
 454                                dvb_dmx_swfilter_packets(&adap->demux, buf, 21);
 455                                adap->packet_count = 0;
 456                        }
 457                }
 458        }
 459
 460        page->upackets[PT1_NR_UPACKETS - 1] = 0;
 461        return 1;
 462}
 463
 464static int pt1_thread(void *data)
 465{
 466        struct pt1 *pt1;
 467        struct pt1_buffer_page *page;
 468        bool was_frozen;
 469
 470#define PT1_FETCH_DELAY 10
 471#define PT1_FETCH_DELAY_DELTA 2
 472
 473        pt1 = data;
 474        set_freezable();
 475
 476        while (!kthread_freezable_should_stop(&was_frozen)) {
 477                if (was_frozen) {
 478                        int i;
 479
 480                        for (i = 0; i < PT1_NR_ADAPS; i++)
 481                                pt1_set_stream(pt1, i, !!pt1->adaps[i]->users);
 482                }
 483
 484                page = pt1->tables[pt1->table_index].bufs[pt1->buf_index].page;
 485                if (!pt1_filter(pt1, page)) {
 486                        ktime_t delay;
 487
 488                        delay = ktime_set(0, PT1_FETCH_DELAY * NSEC_PER_MSEC);
 489                        set_current_state(TASK_INTERRUPTIBLE);
 490                        schedule_hrtimeout_range(&delay,
 491                                        PT1_FETCH_DELAY_DELTA * NSEC_PER_MSEC,
 492                                        HRTIMER_MODE_REL);
 493                        continue;
 494                }
 495
 496                if (++pt1->buf_index >= PT1_NR_BUFS) {
 497                        pt1_increment_table_count(pt1);
 498                        pt1->buf_index = 0;
 499                        if (++pt1->table_index >= pt1_nr_tables)
 500                                pt1->table_index = 0;
 501                }
 502        }
 503
 504        return 0;
 505}
 506
 507static void pt1_free_page(struct pt1 *pt1, void *page, dma_addr_t addr)
 508{
 509        dma_free_coherent(&pt1->pdev->dev, PT1_PAGE_SIZE, page, addr);
 510}
 511
 512static void *pt1_alloc_page(struct pt1 *pt1, dma_addr_t *addrp, u32 *pfnp)
 513{
 514        void *page;
 515        dma_addr_t addr;
 516
 517        page = dma_alloc_coherent(&pt1->pdev->dev, PT1_PAGE_SIZE, &addr,
 518                                  GFP_KERNEL);
 519        if (page == NULL)
 520                return NULL;
 521
 522        BUG_ON(addr & (PT1_PAGE_SIZE - 1));
 523        BUG_ON(addr >> PT1_PAGE_SHIFT >> 31 >> 1);
 524
 525        *addrp = addr;
 526        *pfnp = addr >> PT1_PAGE_SHIFT;
 527        return page;
 528}
 529
 530static void pt1_cleanup_buffer(struct pt1 *pt1, struct pt1_buffer *buf)
 531{
 532        pt1_free_page(pt1, buf->page, buf->addr);
 533}
 534
 535static int
 536pt1_init_buffer(struct pt1 *pt1, struct pt1_buffer *buf,  u32 *pfnp)
 537{
 538        struct pt1_buffer_page *page;
 539        dma_addr_t addr;
 540
 541        page = pt1_alloc_page(pt1, &addr, pfnp);
 542        if (page == NULL)
 543                return -ENOMEM;
 544
 545        page->upackets[PT1_NR_UPACKETS - 1] = 0;
 546
 547        buf->page = page;
 548        buf->addr = addr;
 549        return 0;
 550}
 551
 552static void pt1_cleanup_table(struct pt1 *pt1, struct pt1_table *table)
 553{
 554        int i;
 555
 556        for (i = 0; i < PT1_NR_BUFS; i++)
 557                pt1_cleanup_buffer(pt1, &table->bufs[i]);
 558
 559        pt1_free_page(pt1, table->page, table->addr);
 560}
 561
 562static int
 563pt1_init_table(struct pt1 *pt1, struct pt1_table *table, u32 *pfnp)
 564{
 565        struct pt1_table_page *page;
 566        dma_addr_t addr;
 567        int i, ret;
 568        u32 buf_pfn;
 569
 570        page = pt1_alloc_page(pt1, &addr, pfnp);
 571        if (page == NULL)
 572                return -ENOMEM;
 573
 574        for (i = 0; i < PT1_NR_BUFS; i++) {
 575                ret = pt1_init_buffer(pt1, &table->bufs[i], &buf_pfn);
 576                if (ret < 0)
 577                        goto err;
 578
 579                page->buf_pfns[i] = cpu_to_le32(buf_pfn);
 580        }
 581
 582        pt1_increment_table_count(pt1);
 583        table->page = page;
 584        table->addr = addr;
 585        return 0;
 586
 587err:
 588        while (i--)
 589                pt1_cleanup_buffer(pt1, &table->bufs[i]);
 590
 591        pt1_free_page(pt1, page, addr);
 592        return ret;
 593}
 594
 595static void pt1_cleanup_tables(struct pt1 *pt1)
 596{
 597        struct pt1_table *tables;
 598        int i;
 599
 600        tables = pt1->tables;
 601        pt1_unregister_tables(pt1);
 602
 603        for (i = 0; i < pt1_nr_tables; i++)
 604                pt1_cleanup_table(pt1, &tables[i]);
 605
 606        vfree(tables);
 607}
 608
 609static int pt1_init_tables(struct pt1 *pt1)
 610{
 611        struct pt1_table *tables;
 612        int i, ret;
 613        u32 first_pfn, pfn;
 614
 615        if (!pt1_nr_tables)
 616                return 0;
 617
 618        tables = vmalloc(array_size(pt1_nr_tables, sizeof(struct pt1_table)));
 619        if (tables == NULL)
 620                return -ENOMEM;
 621
 622        pt1_init_table_count(pt1);
 623
 624        i = 0;
 625        ret = pt1_init_table(pt1, &tables[0], &first_pfn);
 626        if (ret)
 627                goto err;
 628        i++;
 629
 630        while (i < pt1_nr_tables) {
 631                ret = pt1_init_table(pt1, &tables[i], &pfn);
 632                if (ret)
 633                        goto err;
 634                tables[i - 1].page->next_pfn = cpu_to_le32(pfn);
 635                i++;
 636        }
 637
 638        tables[pt1_nr_tables - 1].page->next_pfn = cpu_to_le32(first_pfn);
 639
 640        pt1_register_tables(pt1, first_pfn);
 641        pt1->tables = tables;
 642        return 0;
 643
 644err:
 645        while (i--)
 646                pt1_cleanup_table(pt1, &tables[i]);
 647
 648        vfree(tables);
 649        return ret;
 650}
 651
 652static int pt1_start_polling(struct pt1 *pt1)
 653{
 654        int ret = 0;
 655
 656        mutex_lock(&pt1->lock);
 657        if (!pt1->kthread) {
 658                pt1->kthread = kthread_run(pt1_thread, pt1, "earth-pt1");
 659                if (IS_ERR(pt1->kthread)) {
 660                        ret = PTR_ERR(pt1->kthread);
 661                        pt1->kthread = NULL;
 662                }
 663        }
 664        mutex_unlock(&pt1->lock);
 665        return ret;
 666}
 667
 668static int pt1_start_feed(struct dvb_demux_feed *feed)
 669{
 670        struct pt1_adapter *adap;
 671        adap = container_of(feed->demux, struct pt1_adapter, demux);
 672        if (!adap->users++) {
 673                int ret;
 674
 675                ret = pt1_start_polling(adap->pt1);
 676                if (ret)
 677                        return ret;
 678                pt1_set_stream(adap->pt1, adap->index, 1);
 679        }
 680        return 0;
 681}
 682
 683static void pt1_stop_polling(struct pt1 *pt1)
 684{
 685        int i, count;
 686
 687        mutex_lock(&pt1->lock);
 688        for (i = 0, count = 0; i < PT1_NR_ADAPS; i++)
 689                count += pt1->adaps[i]->users;
 690
 691        if (count == 0 && pt1->kthread) {
 692                kthread_stop(pt1->kthread);
 693                pt1->kthread = NULL;
 694        }
 695        mutex_unlock(&pt1->lock);
 696}
 697
 698static int pt1_stop_feed(struct dvb_demux_feed *feed)
 699{
 700        struct pt1_adapter *adap;
 701        adap = container_of(feed->demux, struct pt1_adapter, demux);
 702        if (!--adap->users) {
 703                pt1_set_stream(adap->pt1, adap->index, 0);
 704                pt1_stop_polling(adap->pt1);
 705        }
 706        return 0;
 707}
 708
 709static void
 710pt1_update_power(struct pt1 *pt1)
 711{
 712        int bits;
 713        int i;
 714        struct pt1_adapter *adap;
 715        static const int sleep_bits[] = {
 716                1 << 4,
 717                1 << 6 | 1 << 7,
 718                1 << 5,
 719                1 << 6 | 1 << 8,
 720        };
 721
 722        bits = pt1->power | !pt1->reset << 3;
 723        mutex_lock(&pt1->lock);
 724        for (i = 0; i < PT1_NR_ADAPS; i++) {
 725                adap = pt1->adaps[i];
 726                switch (adap->voltage) {
 727                case SEC_VOLTAGE_13: /* actually 11V */
 728                        bits |= 1 << 2;
 729                        break;
 730                case SEC_VOLTAGE_18: /* actually 15V */
 731                        bits |= 1 << 1 | 1 << 2;
 732                        break;
 733                default:
 734                        break;
 735                }
 736
 737                /* XXX: The bits should be changed depending on adap->sleep. */
 738                bits |= sleep_bits[i];
 739        }
 740        pt1_write_reg(pt1, 1, bits);
 741        mutex_unlock(&pt1->lock);
 742}
 743
 744static int pt1_set_voltage(struct dvb_frontend *fe, enum fe_sec_voltage voltage)
 745{
 746        struct pt1_adapter *adap;
 747
 748        adap = container_of(fe->dvb, struct pt1_adapter, adap);
 749        adap->voltage = voltage;
 750        pt1_update_power(adap->pt1);
 751
 752        if (adap->orig_set_voltage)
 753                return adap->orig_set_voltage(fe, voltage);
 754        else
 755                return 0;
 756}
 757
 758static int pt1_sleep(struct dvb_frontend *fe)
 759{
 760        struct pt1_adapter *adap;
 761        int ret;
 762
 763        adap = container_of(fe->dvb, struct pt1_adapter, adap);
 764
 765        ret = 0;
 766        if (adap->orig_sleep)
 767                ret = adap->orig_sleep(fe);
 768
 769        adap->sleep = 1;
 770        pt1_update_power(adap->pt1);
 771        return ret;
 772}
 773
 774static int pt1_wakeup(struct dvb_frontend *fe)
 775{
 776        struct pt1_adapter *adap;
 777        int ret;
 778
 779        adap = container_of(fe->dvb, struct pt1_adapter, adap);
 780        adap->sleep = 0;
 781        pt1_update_power(adap->pt1);
 782        usleep_range(1000, 2000);
 783
 784        ret = config_demod(adap->demod_i2c_client, adap->pt1->fe_clk);
 785        if (ret == 0 && adap->orig_init)
 786                ret = adap->orig_init(fe);
 787        return ret;
 788}
 789
 790static void pt1_free_adapter(struct pt1_adapter *adap)
 791{
 792        adap->demux.dmx.close(&adap->demux.dmx);
 793        dvb_dmxdev_release(&adap->dmxdev);
 794        dvb_dmx_release(&adap->demux);
 795        dvb_unregister_adapter(&adap->adap);
 796        free_page((unsigned long)adap->buf);
 797        kfree(adap);
 798}
 799
 800DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
 801
 802static struct pt1_adapter *
 803pt1_alloc_adapter(struct pt1 *pt1)
 804{
 805        struct pt1_adapter *adap;
 806        void *buf;
 807        struct dvb_adapter *dvb_adap;
 808        struct dvb_demux *demux;
 809        struct dmxdev *dmxdev;
 810        int ret;
 811
 812        adap = kzalloc(sizeof(struct pt1_adapter), GFP_KERNEL);
 813        if (!adap) {
 814                ret = -ENOMEM;
 815                goto err;
 816        }
 817
 818        adap->pt1 = pt1;
 819
 820        adap->voltage = SEC_VOLTAGE_OFF;
 821        adap->sleep = 1;
 822
 823        buf = (u8 *)__get_free_page(GFP_KERNEL);
 824        if (!buf) {
 825                ret = -ENOMEM;
 826                goto err_kfree;
 827        }
 828
 829        adap->buf = buf;
 830        adap->upacket_count = 0;
 831        adap->packet_count = 0;
 832        adap->st_count = -1;
 833
 834        dvb_adap = &adap->adap;
 835        dvb_adap->priv = adap;
 836        ret = dvb_register_adapter(dvb_adap, DRIVER_NAME, THIS_MODULE,
 837                                   &pt1->pdev->dev, adapter_nr);
 838        if (ret < 0)
 839                goto err_free_page;
 840
 841        demux = &adap->demux;
 842        demux->dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING;
 843        demux->priv = adap;
 844        demux->feednum = 256;
 845        demux->filternum = 256;
 846        demux->start_feed = pt1_start_feed;
 847        demux->stop_feed = pt1_stop_feed;
 848        demux->write_to_decoder = NULL;
 849        ret = dvb_dmx_init(demux);
 850        if (ret < 0)
 851                goto err_unregister_adapter;
 852
 853        dmxdev = &adap->dmxdev;
 854        dmxdev->filternum = 256;
 855        dmxdev->demux = &demux->dmx;
 856        dmxdev->capabilities = 0;
 857        ret = dvb_dmxdev_init(dmxdev, dvb_adap);
 858        if (ret < 0)
 859                goto err_dmx_release;
 860
 861        return adap;
 862
 863err_dmx_release:
 864        dvb_dmx_release(demux);
 865err_unregister_adapter:
 866        dvb_unregister_adapter(dvb_adap);
 867err_free_page:
 868        free_page((unsigned long)buf);
 869err_kfree:
 870        kfree(adap);
 871err:
 872        return ERR_PTR(ret);
 873}
 874
 875static void pt1_cleanup_adapters(struct pt1 *pt1)
 876{
 877        int i;
 878        for (i = 0; i < PT1_NR_ADAPS; i++)
 879                pt1_free_adapter(pt1->adaps[i]);
 880}
 881
 882static int pt1_init_adapters(struct pt1 *pt1)
 883{
 884        int i;
 885        struct pt1_adapter *adap;
 886        int ret;
 887
 888        for (i = 0; i < PT1_NR_ADAPS; i++) {
 889                adap = pt1_alloc_adapter(pt1);
 890                if (IS_ERR(adap)) {
 891                        ret = PTR_ERR(adap);
 892                        goto err;
 893                }
 894
 895                adap->index = i;
 896                pt1->adaps[i] = adap;
 897        }
 898        return 0;
 899
 900err:
 901        while (i--)
 902                pt1_free_adapter(pt1->adaps[i]);
 903
 904        return ret;
 905}
 906
 907static void pt1_cleanup_frontend(struct pt1_adapter *adap)
 908{
 909        dvb_unregister_frontend(adap->fe);
 910        dvb_module_release(adap->tuner_i2c_client);
 911        dvb_module_release(adap->demod_i2c_client);
 912}
 913
 914static int pt1_init_frontend(struct pt1_adapter *adap, struct dvb_frontend *fe)
 915{
 916        int ret;
 917
 918        adap->orig_set_voltage = fe->ops.set_voltage;
 919        adap->orig_sleep = fe->ops.sleep;
 920        adap->orig_init = fe->ops.init;
 921        fe->ops.set_voltage = pt1_set_voltage;
 922        fe->ops.sleep = pt1_sleep;
 923        fe->ops.init = pt1_wakeup;
 924
 925        ret = dvb_register_frontend(&adap->adap, fe);
 926        if (ret < 0)
 927                return ret;
 928
 929        adap->fe = fe;
 930        return 0;
 931}
 932
 933static void pt1_cleanup_frontends(struct pt1 *pt1)
 934{
 935        int i;
 936        for (i = 0; i < PT1_NR_ADAPS; i++)
 937                pt1_cleanup_frontend(pt1->adaps[i]);
 938}
 939
 940static int pt1_init_frontends(struct pt1 *pt1)
 941{
 942        int i;
 943        int ret;
 944
 945        for (i = 0; i < ARRAY_SIZE(pt1_configs); i++) {
 946                const struct i2c_board_info *info;
 947                struct tc90522_config dcfg;
 948                struct i2c_client *cl;
 949
 950                info = &pt1_configs[i].demod_info;
 951                dcfg = pt1_configs[i].demod_cfg;
 952                dcfg.tuner_i2c = NULL;
 953
 954                ret = -ENODEV;
 955                cl = dvb_module_probe("tc90522", info->type, &pt1->i2c_adap,
 956                                      info->addr, &dcfg);
 957                if (!cl)
 958                        goto fe_unregister;
 959                pt1->adaps[i]->demod_i2c_client = cl;
 960
 961                if (!strncmp(cl->name, TC90522_I2C_DEV_SAT,
 962                             strlen(TC90522_I2C_DEV_SAT))) {
 963                        struct qm1d1b0004_config tcfg;
 964
 965                        info = &pt1_configs[i].tuner_info;
 966                        tcfg = pt1_configs[i].tuner_cfg.qm1d1b0004;
 967                        tcfg.fe = dcfg.fe;
 968                        cl = dvb_module_probe("qm1d1b0004",
 969                                              info->type, dcfg.tuner_i2c,
 970                                              info->addr, &tcfg);
 971                } else {
 972                        struct dvb_pll_config tcfg;
 973
 974                        info = &pt1_configs[i].tuner_info;
 975                        tcfg = pt1_configs[i].tuner_cfg.tda6651;
 976                        tcfg.fe = dcfg.fe;
 977                        cl = dvb_module_probe("dvb_pll",
 978                                              info->type, dcfg.tuner_i2c,
 979                                              info->addr, &tcfg);
 980                }
 981                if (!cl)
 982                        goto demod_release;
 983                pt1->adaps[i]->tuner_i2c_client = cl;
 984
 985                ret = pt1_init_frontend(pt1->adaps[i], dcfg.fe);
 986                if (ret < 0)
 987                        goto tuner_release;
 988        }
 989
 990        return 0;
 991
 992tuner_release:
 993        dvb_module_release(pt1->adaps[i]->tuner_i2c_client);
 994demod_release:
 995        dvb_module_release(pt1->adaps[i]->demod_i2c_client);
 996fe_unregister:
 997        dev_warn(&pt1->pdev->dev, "failed to init FE(%d).\n", i);
 998        i--;
 999        for (; i >= 0; i--) {
1000                dvb_unregister_frontend(pt1->adaps[i]->fe);
1001                dvb_module_release(pt1->adaps[i]->tuner_i2c_client);
1002                dvb_module_release(pt1->adaps[i]->demod_i2c_client);
1003        }
1004        return ret;
1005}
1006
1007static void pt1_i2c_emit(struct pt1 *pt1, int addr, int busy, int read_enable,
1008                         int clock, int data, int next_addr)
1009{
1010        pt1_write_reg(pt1, 4, addr << 18 | busy << 13 | read_enable << 12 |
1011                      !clock << 11 | !data << 10 | next_addr);
1012}
1013
1014static void pt1_i2c_write_bit(struct pt1 *pt1, int addr, int *addrp, int data)
1015{
1016        pt1_i2c_emit(pt1, addr,     1, 0, 0, data, addr + 1);
1017        pt1_i2c_emit(pt1, addr + 1, 1, 0, 1, data, addr + 2);
1018        pt1_i2c_emit(pt1, addr + 2, 1, 0, 0, data, addr + 3);
1019        *addrp = addr + 3;
1020}
1021
1022static void pt1_i2c_read_bit(struct pt1 *pt1, int addr, int *addrp)
1023{
1024        pt1_i2c_emit(pt1, addr,     1, 0, 0, 1, addr + 1);
1025        pt1_i2c_emit(pt1, addr + 1, 1, 0, 1, 1, addr + 2);
1026        pt1_i2c_emit(pt1, addr + 2, 1, 1, 1, 1, addr + 3);
1027        pt1_i2c_emit(pt1, addr + 3, 1, 0, 0, 1, addr + 4);
1028        *addrp = addr + 4;
1029}
1030
1031static void pt1_i2c_write_byte(struct pt1 *pt1, int addr, int *addrp, int data)
1032{
1033        int i;
1034        for (i = 0; i < 8; i++)
1035                pt1_i2c_write_bit(pt1, addr, &addr, data >> (7 - i) & 1);
1036        pt1_i2c_write_bit(pt1, addr, &addr, 1);
1037        *addrp = addr;
1038}
1039
1040static void pt1_i2c_read_byte(struct pt1 *pt1, int addr, int *addrp, int last)
1041{
1042        int i;
1043        for (i = 0; i < 8; i++)
1044                pt1_i2c_read_bit(pt1, addr, &addr);
1045        pt1_i2c_write_bit(pt1, addr, &addr, last);
1046        *addrp = addr;
1047}
1048
1049static void pt1_i2c_prepare(struct pt1 *pt1, int addr, int *addrp)
1050{
1051        pt1_i2c_emit(pt1, addr,     1, 0, 1, 1, addr + 1);
1052        pt1_i2c_emit(pt1, addr + 1, 1, 0, 1, 0, addr + 2);
1053        pt1_i2c_emit(pt1, addr + 2, 1, 0, 0, 0, addr + 3);
1054        *addrp = addr + 3;
1055}
1056
1057static void
1058pt1_i2c_write_msg(struct pt1 *pt1, int addr, int *addrp, struct i2c_msg *msg)
1059{
1060        int i;
1061        pt1_i2c_prepare(pt1, addr, &addr);
1062        pt1_i2c_write_byte(pt1, addr, &addr, msg->addr << 1);
1063        for (i = 0; i < msg->len; i++)
1064                pt1_i2c_write_byte(pt1, addr, &addr, msg->buf[i]);
1065        *addrp = addr;
1066}
1067
1068static void
1069pt1_i2c_read_msg(struct pt1 *pt1, int addr, int *addrp, struct i2c_msg *msg)
1070{
1071        int i;
1072        pt1_i2c_prepare(pt1, addr, &addr);
1073        pt1_i2c_write_byte(pt1, addr, &addr, msg->addr << 1 | 1);
1074        for (i = 0; i < msg->len; i++)
1075                pt1_i2c_read_byte(pt1, addr, &addr, i == msg->len - 1);
1076        *addrp = addr;
1077}
1078
1079static int pt1_i2c_end(struct pt1 *pt1, int addr)
1080{
1081        pt1_i2c_emit(pt1, addr,     1, 0, 0, 0, addr + 1);
1082        pt1_i2c_emit(pt1, addr + 1, 1, 0, 1, 0, addr + 2);
1083        pt1_i2c_emit(pt1, addr + 2, 1, 0, 1, 1, 0);
1084
1085        pt1_write_reg(pt1, 0, 0x00000004);
1086        do {
1087                if (signal_pending(current))
1088                        return -EINTR;
1089                usleep_range(1000, 2000);
1090        } while (pt1_read_reg(pt1, 0) & 0x00000080);
1091        return 0;
1092}
1093
1094static void pt1_i2c_begin(struct pt1 *pt1, int *addrp)
1095{
1096        int addr;
1097        addr = 0;
1098
1099        pt1_i2c_emit(pt1, addr,     0, 0, 1, 1, addr /* itself */);
1100        addr = addr + 1;
1101
1102        if (!pt1->i2c_running) {
1103                pt1_i2c_emit(pt1, addr,     1, 0, 1, 1, addr + 1);
1104                pt1_i2c_emit(pt1, addr + 1, 1, 0, 1, 0, addr + 2);
1105                addr = addr + 2;
1106                pt1->i2c_running = 1;
1107        }
1108        *addrp = addr;
1109}
1110
1111static int pt1_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
1112{
1113        struct pt1 *pt1;
1114        int i;
1115        struct i2c_msg *msg, *next_msg;
1116        int addr, ret;
1117        u16 len;
1118        u32 word;
1119
1120        pt1 = i2c_get_adapdata(adap);
1121
1122        for (i = 0; i < num; i++) {
1123                msg = &msgs[i];
1124                if (msg->flags & I2C_M_RD)
1125                        return -ENOTSUPP;
1126
1127                if (i + 1 < num)
1128                        next_msg = &msgs[i + 1];
1129                else
1130                        next_msg = NULL;
1131
1132                if (next_msg && next_msg->flags & I2C_M_RD) {
1133                        i++;
1134
1135                        len = next_msg->len;
1136                        if (len > 4)
1137                                return -ENOTSUPP;
1138
1139                        pt1_i2c_begin(pt1, &addr);
1140                        pt1_i2c_write_msg(pt1, addr, &addr, msg);
1141                        pt1_i2c_read_msg(pt1, addr, &addr, next_msg);
1142                        ret = pt1_i2c_end(pt1, addr);
1143                        if (ret < 0)
1144                                return ret;
1145
1146                        word = pt1_read_reg(pt1, 2);
1147                        while (len--) {
1148                                next_msg->buf[len] = word;
1149                                word >>= 8;
1150                        }
1151                } else {
1152                        pt1_i2c_begin(pt1, &addr);
1153                        pt1_i2c_write_msg(pt1, addr, &addr, msg);
1154                        ret = pt1_i2c_end(pt1, addr);
1155                        if (ret < 0)
1156                                return ret;
1157                }
1158        }
1159
1160        return num;
1161}
1162
1163static u32 pt1_i2c_func(struct i2c_adapter *adap)
1164{
1165        return I2C_FUNC_I2C;
1166}
1167
1168static const struct i2c_algorithm pt1_i2c_algo = {
1169        .master_xfer = pt1_i2c_xfer,
1170        .functionality = pt1_i2c_func,
1171};
1172
1173static void pt1_i2c_wait(struct pt1 *pt1)
1174{
1175        int i;
1176        for (i = 0; i < 128; i++)
1177                pt1_i2c_emit(pt1, 0, 0, 0, 1, 1, 0);
1178}
1179
1180static void pt1_i2c_init(struct pt1 *pt1)
1181{
1182        int i;
1183        for (i = 0; i < 1024; i++)
1184                pt1_i2c_emit(pt1, i, 0, 0, 1, 1, 0);
1185}
1186
1187#ifdef CONFIG_PM_SLEEP
1188
1189static int pt1_suspend(struct device *dev)
1190{
1191        struct pci_dev *pdev = to_pci_dev(dev);
1192        struct pt1 *pt1 = pci_get_drvdata(pdev);
1193
1194        pt1_init_streams(pt1);
1195        pt1_disable_ram(pt1);
1196        pt1->power = 0;
1197        pt1->reset = 1;
1198        pt1_update_power(pt1);
1199        return 0;
1200}
1201
1202static int pt1_resume(struct device *dev)
1203{
1204        struct pci_dev *pdev = to_pci_dev(dev);
1205        struct pt1 *pt1 = pci_get_drvdata(pdev);
1206        int ret;
1207        int i;
1208
1209        pt1->power = 0;
1210        pt1->reset = 1;
1211        pt1_update_power(pt1);
1212
1213        pt1_i2c_init(pt1);
1214        pt1_i2c_wait(pt1);
1215
1216        ret = pt1_sync(pt1);
1217        if (ret < 0)
1218                goto resume_err;
1219
1220        pt1_identify(pt1);
1221
1222        ret = pt1_unlock(pt1);
1223        if (ret < 0)
1224                goto resume_err;
1225
1226        ret = pt1_reset_pci(pt1);
1227        if (ret < 0)
1228                goto resume_err;
1229
1230        ret = pt1_reset_ram(pt1);
1231        if (ret < 0)
1232                goto resume_err;
1233
1234        ret = pt1_enable_ram(pt1);
1235        if (ret < 0)
1236                goto resume_err;
1237
1238        pt1_init_streams(pt1);
1239
1240        pt1->power = 1;
1241        pt1_update_power(pt1);
1242        msleep(20);
1243
1244        pt1->reset = 0;
1245        pt1_update_power(pt1);
1246        usleep_range(1000, 2000);
1247
1248        for (i = 0; i < PT1_NR_ADAPS; i++)
1249                dvb_frontend_reinitialise(pt1->adaps[i]->fe);
1250
1251        pt1_init_table_count(pt1);
1252        for (i = 0; i < pt1_nr_tables; i++) {
1253                int j;
1254
1255                for (j = 0; j < PT1_NR_BUFS; j++)
1256                        pt1->tables[i].bufs[j].page->upackets[PT1_NR_UPACKETS-1]
1257                                = 0;
1258                pt1_increment_table_count(pt1);
1259        }
1260        pt1_register_tables(pt1, pt1->tables[0].addr >> PT1_PAGE_SHIFT);
1261
1262        pt1->table_index = 0;
1263        pt1->buf_index = 0;
1264        for (i = 0; i < PT1_NR_ADAPS; i++) {
1265                pt1->adaps[i]->upacket_count = 0;
1266                pt1->adaps[i]->packet_count = 0;
1267                pt1->adaps[i]->st_count = -1;
1268        }
1269
1270        return 0;
1271
1272resume_err:
1273        dev_info(&pt1->pdev->dev, "failed to resume PT1/PT2.");
1274        return 0;       /* resume anyway */
1275}
1276
1277#endif /* CONFIG_PM_SLEEP */
1278
1279static void pt1_remove(struct pci_dev *pdev)
1280{
1281        struct pt1 *pt1;
1282        void __iomem *regs;
1283
1284        pt1 = pci_get_drvdata(pdev);
1285        regs = pt1->regs;
1286
1287        if (pt1->kthread)
1288                kthread_stop(pt1->kthread);
1289        pt1_cleanup_tables(pt1);
1290        pt1_cleanup_frontends(pt1);
1291        pt1_disable_ram(pt1);
1292        pt1->power = 0;
1293        pt1->reset = 1;
1294        pt1_update_power(pt1);
1295        pt1_cleanup_adapters(pt1);
1296        i2c_del_adapter(&pt1->i2c_adap);
1297        kfree(pt1);
1298        pci_iounmap(pdev, regs);
1299        pci_release_regions(pdev);
1300        pci_disable_device(pdev);
1301}
1302
1303static int pt1_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1304{
1305        int ret;
1306        void __iomem *regs;
1307        struct pt1 *pt1;
1308        struct i2c_adapter *i2c_adap;
1309
1310        ret = pci_enable_device(pdev);
1311        if (ret < 0)
1312                goto err;
1313
1314        ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1315        if (ret < 0)
1316                goto err_pci_disable_device;
1317
1318        pci_set_master(pdev);
1319
1320        ret = pci_request_regions(pdev, DRIVER_NAME);
1321        if (ret < 0)
1322                goto err_pci_disable_device;
1323
1324        regs = pci_iomap(pdev, 0, 0);
1325        if (!regs) {
1326                ret = -EIO;
1327                goto err_pci_release_regions;
1328        }
1329
1330        pt1 = kzalloc(sizeof(struct pt1), GFP_KERNEL);
1331        if (!pt1) {
1332                ret = -ENOMEM;
1333                goto err_pci_iounmap;
1334        }
1335
1336        mutex_init(&pt1->lock);
1337        pt1->pdev = pdev;
1338        pt1->regs = regs;
1339        pt1->fe_clk = (pdev->device == 0x211a) ?
1340                                PT1_FE_CLK_20MHZ : PT1_FE_CLK_25MHZ;
1341        pci_set_drvdata(pdev, pt1);
1342
1343        ret = pt1_init_adapters(pt1);
1344        if (ret < 0)
1345                goto err_kfree;
1346
1347        mutex_init(&pt1->lock);
1348
1349        pt1->power = 0;
1350        pt1->reset = 1;
1351        pt1_update_power(pt1);
1352
1353        i2c_adap = &pt1->i2c_adap;
1354        i2c_adap->algo = &pt1_i2c_algo;
1355        i2c_adap->algo_data = NULL;
1356        i2c_adap->dev.parent = &pdev->dev;
1357        strcpy(i2c_adap->name, DRIVER_NAME);
1358        i2c_set_adapdata(i2c_adap, pt1);
1359        ret = i2c_add_adapter(i2c_adap);
1360        if (ret < 0)
1361                goto err_pt1_cleanup_adapters;
1362
1363        pt1_i2c_init(pt1);
1364        pt1_i2c_wait(pt1);
1365
1366        ret = pt1_sync(pt1);
1367        if (ret < 0)
1368                goto err_i2c_del_adapter;
1369
1370        pt1_identify(pt1);
1371
1372        ret = pt1_unlock(pt1);
1373        if (ret < 0)
1374                goto err_i2c_del_adapter;
1375
1376        ret = pt1_reset_pci(pt1);
1377        if (ret < 0)
1378                goto err_i2c_del_adapter;
1379
1380        ret = pt1_reset_ram(pt1);
1381        if (ret < 0)
1382                goto err_i2c_del_adapter;
1383
1384        ret = pt1_enable_ram(pt1);
1385        if (ret < 0)
1386                goto err_i2c_del_adapter;
1387
1388        pt1_init_streams(pt1);
1389
1390        pt1->power = 1;
1391        pt1_update_power(pt1);
1392        msleep(20);
1393
1394        pt1->reset = 0;
1395        pt1_update_power(pt1);
1396        usleep_range(1000, 2000);
1397
1398        ret = pt1_init_frontends(pt1);
1399        if (ret < 0)
1400                goto err_pt1_disable_ram;
1401
1402        ret = pt1_init_tables(pt1);
1403        if (ret < 0)
1404                goto err_pt1_cleanup_frontends;
1405
1406        return 0;
1407
1408err_pt1_cleanup_frontends:
1409        pt1_cleanup_frontends(pt1);
1410err_pt1_disable_ram:
1411        pt1_disable_ram(pt1);
1412        pt1->power = 0;
1413        pt1->reset = 1;
1414        pt1_update_power(pt1);
1415err_i2c_del_adapter:
1416        i2c_del_adapter(i2c_adap);
1417err_pt1_cleanup_adapters:
1418        pt1_cleanup_adapters(pt1);
1419err_kfree:
1420        kfree(pt1);
1421err_pci_iounmap:
1422        pci_iounmap(pdev, regs);
1423err_pci_release_regions:
1424        pci_release_regions(pdev);
1425err_pci_disable_device:
1426        pci_disable_device(pdev);
1427err:
1428        return ret;
1429
1430}
1431
1432static const struct pci_device_id pt1_id_table[] = {
1433        { PCI_DEVICE(0x10ee, 0x211a) },
1434        { PCI_DEVICE(0x10ee, 0x222a) },
1435        { },
1436};
1437MODULE_DEVICE_TABLE(pci, pt1_id_table);
1438
1439static SIMPLE_DEV_PM_OPS(pt1_pm_ops, pt1_suspend, pt1_resume);
1440
1441static struct pci_driver pt1_driver = {
1442        .name           = DRIVER_NAME,
1443        .probe          = pt1_probe,
1444        .remove         = pt1_remove,
1445        .id_table       = pt1_id_table,
1446        .driver.pm      = &pt1_pm_ops,
1447};
1448
1449module_pci_driver(pt1_driver);
1450
1451MODULE_AUTHOR("Takahito HIRANO <hiranotaka@zng.info>");
1452MODULE_DESCRIPTION("Earthsoft PT1/PT2 Driver");
1453MODULE_LICENSE("GPL");
1454