Backported fix suspend/resume issue in brcmsmac

Few days ago my Macbook just died therefore I was forced to buy a new laptop cialis overnight. After a quick overview on marked I’ve decided to buy an Toshiba Portege R700 with Intel i5 processor. Unfortunately it has an Broadcom 4727 Wi-Fi card with is only supported by staging brcm80211 module. Generally it works pretty well on 2.6.37 kernel, if you shutdown and power up laptop, but when  you use suspend like I do it doesn’t get up after resume. The module needs to be reloaded to work again.

Thanks to Arend van Spriel this issue were fixed but patch that was send on linux-wireless mailing list doesn’t apply on vanilla 2.6.37 sources.  To get this working I decided to back port this patch, and it appears to be was very simple task ;). So if you are have similar problems with BCM4727 on 2.6.37 like I had here is a patch that clearly apples on 2.6.37 and fix this issue.

diff -uNr drivers-orig/staging/brcm80211/sys/wl_mac80211.c drivers/staging/brcm80211/sys/wl_mac80211.c
--- drivers-orig/staging/brcm80211/sys/wl_mac80211.c   2011-01-05 01:50:19.000000000 +0100
+++ drivers/staging/brcm80211/sys/wl_mac80211.c    2011-01-13 17:28:50.000000000 +0100
@@ -299,7 +299,6 @@
    wl_info_t *wl = hw->priv;
    ASSERT(wl);
    WL_LOCK(wl);
-  wl_down(wl);
    ieee80211_stop_queues(hw);
    WL_UNLOCK(wl);
 
@@ -336,6 +335,14 @@
 static void
 wl_ops_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
 {
+  struct wl_info *wl;
+
+  wl = HW_TO_WL(hw);
+
+  /* put driver in down state */
+  WL_LOCK(wl);
+  wl_down(wl);
+  WL_UNLOCK(wl);
    return;
 }
 
@@ -1356,7 +1363,6 @@
    return 0;
 }
 
-#ifdef LINUXSTA_PS
 static int wl_suspend(struct pci_dev *pdev, pm_message_t state)
 {
    wl_info_t *wl;
@@ -1371,11 +1377,12 @@
        return -ENODEV;
    }
 
+  /* only need to flag hw is down for proper resume */
    WL_LOCK(wl);
-  wl_down(wl);
    wl->pub->hw_up = false;
    WL_UNLOCK(wl);
-  pci_save_state(pdev, wl->pci_psstate);
+
+  pci_save_state(pdev);
    pci_disable_device(pdev);
    return pci_set_power_state(pdev, PCI_D3hot);
 }
@@ -1399,7 +1406,7 @@
    if (err)
        return err;
 
-  pci_restore_state(pdev, wl->pci_psstate);
+  pci_restore_state(pdev);
 
    err = pci_enable_device(pdev);
    if (err)
@@ -1411,13 +1418,12 @@
    if ((val & 0x0000ff00) != 0)
        pci_write_config_dword(pdev, 0x40, val & 0xffff00ff);
 
-  WL_LOCK(wl);
-  err = wl_up(wl);
-  WL_UNLOCK(wl);
-
+  /*
+   *  done. driver will be put in up state
+   *  in wl_ops_add_interface() call.
+   */
    return err;
 }
-#endif                /* LINUXSTA_PS */
 
 static void wl_remove(struct pci_dev *pdev)
 {
@@ -1452,10 +1458,8 @@
 static struct pci_driver wl_pci_driver = {
  .name  = "brcm80211",
  .probe = wl_pci_probe,
-#ifdef LINUXSTA_PS
  .suspend = wl_suspend,
  .resume  = wl_resume,
-#endif                /* LINUXSTA_PS */
  .remove   = __devexit_p(wl_remove),
  .id_table = wl_id_table,
 };
diff -uNr drivers-orig/staging/brcm80211/sys/wl_mac80211.h drivers/staging/brcm80211/sys/wl_mac80211.h
--- drivers-orig/staging/brcm80211/sys/wl_mac80211.h   2011-01-05 01:50:19.000000000 +0100
+++ drivers/staging/brcm80211/sys/wl_mac80211.h    2011-01-13 17:17:39.000000000 +0100
@@ -84,9 +84,7 @@
    unsigned long flags;        /* current irq flags */
 #endif             /* BCMSDIO */
    bool resched;       /* dpc needs to be and is rescheduled */
-#ifdef LINUXSTA_PS
-  u32 pci_psstate[16];   /* pci ps-state save/restore */
-#endif
+
    /* RPC, handle, lock, txq, workitem */
 #ifdef WLC_HIGH_ONLY
    rpc_info_t *rpc;    /* RPC handle */

BTW. This laptop works pretty good on linux. All parts seams to be working properly (I didn’t tested bluetooth, and finger print scaner because I don’t use it), there are only problems after resuming system from suspend like above described problem with BCM4727 (other problems are connected with back light changing and graphics performance).

UPDATE:

It seams that this patch is included in kernel 2.6.38-rc3

Rebase support in EGit

Thanks to Mathias Kinzler EGit have initial support for rebasing. Currently only the simple scenario is supported, when there are no conflicts between actual and given branch. Currently the only place from with rebase action can be launched is in Git Repositories view, the ‘Rebase’ option is available on each branch node for given repository.

If you want to test this new feature you should install EGit for ours “Bleeding Edge Builds” update site.

Get a free private Git hosting!

 

I think that every one knows GitHub and as you should know that we can host there for free ours open source project’s but if we want to have a private repository we should pay for it. It seams fair … but what if I don’t want to pay ? I can setup my own server somewhere or … use one of on-line file hosting service like dropbox (for free we get here 2GB, this is lots of space for git repositories ;)).

How it is possible? It is only about files. As we all know git keeps everything inside .git folder, therefore we can put it in dropbox. To do it we only need to have an account and configured dropbox-folder on ours hard drive, and here is recipe:

  1. First of all we should add new remote to our git remote configuration, I’ll call it dropbox:
    git remote add dropbox file:///home/lock/path/to/dropbox-folder/project.git
  2. Now we should create folder project.git
  3. Launch a terminal and enter project.git folder
  4. Run:
    git init --bare
  5. Go back to yours project directory and push into dropbox:
    git push dropbox

Viola! Dropbox daemon will automatically synchronize with remote “repository”. And there is another feature of this solution, you can share this folder with yours friends!

But there are also some disadvantages:

  1. No access control – if you share yours project with friend she (or he) have full access and can even delete everything … but you always have yours local copy
  2. No web interface – this obvious … I think 😉

This solution I figure out few minutes ago and use it to backup my BS project, and it seams to be working very well 😉

UPDATE:

As Tim said it is also possible to have a free Git hosting on bettercodes.org. To be honest I didn’t check it because solution with dropbox meets my needs.

NEXT UPDATE:

According to Machu’s comment, there is also assembla.com that gives 2GB for SVN or Git repository.

Android, Eclipse, Maven and (Robo)Guice together?

I’m sure that when you trays automated dependency management and application building/deploying you will never want to abandon this kind of comfort that it gives. The same situation is with dependency injection; when you will get it ideas. In “normal” desktop, web, or server side project’s integrating with such tools like maven and guice isn’t that complicated like in Android projects.
Android tooling is very consistent and the ADT plug-in isn’t integrated with maven. This isn’t a problem when application is relatively small, or when you don’t want to use continuous integration tools like Hudson. But when you enter Android world from “enterprise” web application like I do, you surely would like to use CI, DI and lots more of cool stuff that was available before.

In this post I’ll present simple Android application that will have Maven and Guice support.
Continue reading

The worst thing that could happen when you have ‘hands on’ presentation

I love ‘hands on’ presentation they are so awesome and give so damn god impression. I’ve decided to prepare such presentation on Warsjawa 2010. Now I know how much self control and cold blood is needed to give such presentation.

Before Warsjawa conference I’ve prepared a list of features that I would like to show, I even write down list of steps that I should follow during presentation. All demos was two or three times repeated and trained … it looks like nothing bad could happen … ‘but’, yes there always is this short lite word ‘but’.

Presentation starts smoothly and with every minute I been more self confident … until 15th or 20th minute when I was smashed out, just blow away. I was showing merge support and it appears that during three-way merge one of line in example file were deleted. Actually it should be marked as conflicting because I’ve made a small mistake any way this shouldn’t be that way. I was there sitting in front of 50 100 or more persons with a nearly discovered bug in core merge functionality … this is a situation that nobody would like to face it. I can’t just go away, that wasn’t a solution … Actually I stay there and even manage to finish presentation and show History and Repositories view, tagging, resetting  and even some other stuff like gerrit and it integration with hudson.

I’ve already create a ticket for this bug in bugzilla and I hope that during next presentation in Szczecin such problems did not occur …