)]}'
{
  "commit": "d0478299b1d714a7001f19fb2cafeb257698a2c0",
  "tree": "4cd9e2881c6f02f26270149770210e6d1aa742cd",
  "parents": [
    "8ef7dce29aead4f17000e2c14b39f0723adc3953"
  ],
  "author": {
    "name": "Carl-Daniel Hailfinger",
    "email": "c-d.hailfinger.devel.2006@gmx.net",
    "time": "Fri Jul 10 21:08:55 2009 +0000"
  },
  "committer": {
    "name": "Carl-Daniel Hailfinger",
    "email": "c-d.hailfinger.devel.2006@gmx.net",
    "time": "Fri Jul 10 21:08:55 2009 +0000"
  },
  "message": "Add SPI multicommand infrastructure\n\nSome SPI opcodes need to be sent in direct succession after each other\nwithout any chip deselect happening in between. A prominent example is\nWREN (Write Enable) directly before PP (Page Program). Intel calls the\nfirst opcode in such a row \"preopcode\".\n\nRight now, we ignore the direct succession requirement completely and it\nworks pretty well because most onboard SPI masters have a timing or\nheuristics which make the problem disappear.\nThe FT2232 SPI flasher is different. Since it is an external flasher,\ntiming is very different to what we can expect from onboard flashers and\nthis leads to failure at slow speeds.\n\nThis patch allows any function to submit multiple SPI commands in a\nstream to any flasher. Support in the individual flashers isn\u0027t\nimplemented yet, so there is one generic function which passes the each\ncommand in the stream one-by-one to the command functions of the\nselected SPI flash driver.\n\nTested-by: Jakob Bornecrantz \u003cwallbraker@gmail.com\u003e\n\nCorresponding to flashrom svn r645.\n\nSigned-off-by: Carl-Daniel Hailfinger \u003cc-d.hailfinger.devel.2006@gmx.net\u003e\nAcked-by: Jakob Bornecrantz \u003cwallbraker@gmail.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "64b083e6214420b0f6738bb2dc921ffd781c01f3",
      "old_mode": 33188,
      "old_path": "dummyflasher.c",
      "new_id": "1b51032ef201c7081cecc8e1548791d2e6e2ca3d",
      "new_mode": 33188,
      "new_path": "dummyflasher.c"
    },
    {
      "type": "modify",
      "old_id": "d978624698acc50bf3349414f834d85a6b0f7992",
      "old_mode": 33188,
      "old_path": "flash.h",
      "new_id": "9e6ca6ca584c08a89798ddea1e9d73f569b0035b",
      "new_mode": 33188,
      "new_path": "flash.h"
    },
    {
      "type": "modify",
      "old_id": "d8ca743393323c136030b5d6f60312f28ad7e453",
      "old_mode": 33188,
      "old_path": "ft2232_spi.c",
      "new_id": "ea7a8107594972e21f6d6e232a4e97830eb53615",
      "new_mode": 33188,
      "new_path": "ft2232_spi.c"
    },
    {
      "type": "modify",
      "old_id": "b87bd5c7ae11c4e9fb08a7feb19d8edfe7473d63",
      "old_mode": 33188,
      "old_path": "ichspi.c",
      "new_id": "6ad55bbed53a7c47f255b8c41aa0a6e7153b10ce",
      "new_mode": 33188,
      "new_path": "ichspi.c"
    },
    {
      "type": "modify",
      "old_id": "67dfd2b6d14bcd0c209b7bc3cc055805b9742ae5",
      "old_mode": 33188,
      "old_path": "it87spi.c",
      "new_id": "f062f4df98fa647441bd98ecf6f3da18348e428d",
      "new_mode": 33188,
      "new_path": "it87spi.c"
    },
    {
      "type": "modify",
      "old_id": "4ca905becb3c526f9cb451494d9a4972e38fe9e5",
      "old_mode": 33188,
      "old_path": "sb600spi.c",
      "new_id": "faafd8206a536765d9821e61efd90bbc7056ab4b",
      "new_mode": 33188,
      "new_path": "sb600spi.c"
    },
    {
      "type": "modify",
      "old_id": "3160754dc3a807a64cb1448959746667634a38c8",
      "old_mode": 33188,
      "old_path": "spi.c",
      "new_id": "16dfe365b89d97423b8198b601c877af141eebf1",
      "new_mode": 33188,
      "new_path": "spi.c"
    },
    {
      "type": "modify",
      "old_id": "9ac15d1983e75722ddeeaaa9fb0adac6fbf9566d",
      "old_mode": 33188,
      "old_path": "wbsio_spi.c",
      "new_id": "cbdddd2eab49a6654455106caf558fdd2dedf5a8",
      "new_mode": 33188,
      "new_path": "wbsio_spi.c"
    }
  ]
}
